ArangoDB + NodeJS =需要用于以下任务的工作示例代码

时间:2014-05-25 11:12:11

标签: node.js arangodb

我来自MongoDB,现在我想使用ArangoDb来使用ACID Transactions。我只使用NodeJS进行编程。

我遇到的问题是以下,我无法将NPM代码示例变为现实!

有3个NPM软件包,其中包含NodeJS驱动程序。 这些代码示例都没有起作用!

然后,当我尝试使用HTTP REST API时,它们至少部分工作。 以下是一种访问ArangoDB的HTTP REST API方法。

但是,如何在文档应该插入的数据库中指定?它总是将其插入_System-Database中。我不想要的。

在这里,您可以看到我的代码..

var restify = require('restify');

// Client
var client = restify.createJsonClient({
  url: 'http://192.168.142.139:8529',
  version: '~1.0'
});

// Now call this insert function to insert a new Document into the ArangoDB Database
insert (function(e,o){

});

function insert ( callback) {
  var data = {
        user : 'Harryblabla',
        nicenumber : 8675,
        nicestring : 'des04950'};

  client.post('/_api/document?collection=testcollection1&createCollection=true&waitForSync=true', 
    data, function (err, req, res, obj) {

    if (obj.error==false) {
        console.log('ok - saved');
        console.log('result '+JSON.stringify(obj));
        callback (err, 1);
    } else {
        console.log('not saved');
        callback ('error', null);
    }
  });

}

它确实在'testcollection1'中插入了Document,但是如何指定数据库?

另外,您能否举例说明如何在字段上使用唯一索引'ensureIndex','更新$ set用于设置字段,以及findOne,就像在MongoDB中一样?

您也可以使用其中一个NPM包编写代码。但我带来的唯一方法是通过HTTP REST Api ..

拜托,谢谢。我喜欢ArangoDb,因为它的开源,提供ACID交易。但主要的缺点是缺乏教程,缺乏示例代码......

*我还需要:更新Collection中的字段,如果不存在则创建它:*

在这里,您可以看到有关如何仅更新特定字段的NodeJS + MongoDB示例。如果它不存在,它将被创建。这正是我在Nodejs中对ArangoDB所需要的。你能给我举个例子吗?请

// Mongo DB connection already opened.
// this is the function to update or create if not exists
mycollection.update({txid: tx.txid},
      {$set: {txid: tx.txid, nice: tx.nice, confvalidated: true}}, {upsert: true}, function(err, records1){
    if (records1) {
      console.log('insertreceived: Amount '+tx.nice+' C: '+tx.confirmations+ 'INSERT RECEIVED: '+tx.txid);
      callback(null, records1);
    } else {
      //callback('error');
      callback('error', null);
    }
   });

3 个答案:

答案 0 :(得分:6)

还有一个Javascript/Node.js驱动程序,可以继续为ArangoDB开发(确认使用2.0)。在此驱动程序的自述文件中,有一些示例如何安装和使用它,文档可用here。如果这不适合您,请将您的问题发送给我们错误报告,然后我们将解决问题。

作为更新问题的代码示例(我刚刚使用了您在MongoDB示例中使用的相同对象,tx.txid必须是文档的_id属性。)您可以使用:

var arango = require('arangojs');
var db = arango.Connection('http://127.0.0.1:8529');
mydb = db.use("yourDatabaseName");
mydb.document.patch(tx.txid,  {
  nice: tx.nice,
  confvalidated: true
});

答案 1 :(得分:4)

您的集合最终都在_system数据库中的原因是因为您未在URL中使用数据库。如果你想使用例如my_database代替默认数据库(即_system),您应该使用/db/my_database/_api/而不是/_api/。您可以在[HTTP API for databases]中找到有关使用多个数据库的更多信息。

我对MongoDB不是很熟悉,但我认为相当于ensureIndex的{​​{1}}集合将使用相同的参数和数据发布到/_api/index集合。根据{{​​3}},如果索引已经存在,服务器将使用200回答,如果已创建索引,则回复201

相当于$set可能是对文档的补丁,它将更新文档而不是覆盖它。来自API documentation for indices

  

如果现有文档尚不存在,则补丁文档中的所有属性都将添加到现有文档中,如果现有文档中存在,则会覆盖现有文档。

最接近的findOne可能是the documentation on HTTP PATCH for documents。它仅支持完全匹配,但是,对于实际查询,您应该使用它的查询语言firstExample simple query

我是其中一个node.js" drivers"的作者。对于我停止使用的ArangoDB。我决定不继续开发它的原因是直接使用HTTP API可能不是在项目中集成ArangoDB最有用的方法。

ArangoDB带有自己的JavaScript环境which also has an HTTP API。您不必通过线路发送查询字符串并在节点代码中调用多个REST端点,而是使用Foxx创建自己的特定于域的HTTP API,这样可以让您抽象出基础数据库特定的调用。除了为您提供涵盖HTTP API全部功能的纯JS API之外, Foxx还允许您在失败时自动回滚执行事务

如果你可以编写node.js代码,你可以编写Foxx代码。 Foxx包含一个可以帮助您入门的教程。如果您使用过ArangoDB的交互式外壳程序arangosh,那么您很高兴知道如果您在使用Foxx时遇到问题,可以在Foxx代码中使用相同的API #39;模型逻辑。

使用Foxx的唯一缺点是你需要将你的Foxx应用程序部署到数据库(除了将node.js代码部署到你的node.js服务器之外),但实际上这不应该让你的项目的部署更加困难。

答案 2 :(得分:2)