3

我来自 MongoDB,现在我想使用 ArangoDb 来使用 ACID 事务。我仅将 NodeJS 用于编程。

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

有 3 个带有 NodeJS 驱动程序的 NPM 包。这些代码示例都不起作用!

然后,当我尝试改用 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”中插入了文档,但我如何指定到 wich 数据库?

另外,您能否给我举例说明如何在字段上使用唯一索引来“确保索引”、“更新 $set 以设置字段”和 findOne,就像在 MongoDB 中一样?

你也可以使用这些 NPM 包之一来编写代码。但我实现的唯一方法是通过 HTTP REST Api..

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

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

在这里,您可以看到有关如何仅更新特定字段的 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);
    }
   });
4

3 回答 3

6

还有一个持续开发的Javascript/Node.js驱动程序可用于 ArangoDB(已确认可与 2.0 一起使用)。在此驱动程序的自述文件中有如何安装和使用它的示例,文档可在此处获得。如果这对您不起作用,请向我们发送有关您的问题的错误报告,然后我们将解决问题。

作为更新问题的代码示例(我刚刚采用了您在 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
});
于 2014-05-26T07:17:22.813 回答
4

您的集合最终都在_system数据库中的原因是您没有在 URL 中使用数据库。如果你想使用 egmy_database代替默认数据库(ie _system),你应该使用/db/my_database/_api/代替简单的/_api/. 您可以在 [the HTTP API for databases] 中找到更多关于使用多个数据库的信息。

我对 MongoDB 不是很熟悉,但我认为相当于ensureIndexPOST'ing 到/_api/index具有相同参数和数据的集合。根据索引的API 文档,200如果索引已经存在或201已创建,服务器将回答。

相当于$set可能是对文档进行修补,这将更新文档而不是覆盖它。从文档的 HTTP PATCH 文档中

如果补丁文档中的所有属性不存在,它们将被添加到现有文档中,如果它们确实存在,则在现有文档中被覆盖。

最接近的等价物findOne可能是firstExample简单查询。它只支持完全匹配,但是对于实际查询,您可能应该使用它的查询语言,它也有一个 HTTP API

我是 ArangoDB 的 node.js“驱动程序”之一的作者,我已停止使用该驱动程序。我决定不继续开发它的原因是直接使用 HTTP API 可能不是在项目中集成 ArangoDB 的最有用的方法。

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

如果你会写 node.js 代码,你就可以写 Foxx 代码。Foxx 文档包含一个可以帮助您入门的教程。如果您使用过arangoshArangoDB 的交互式 shell,如果您在 Foxx 的模型逻辑上遇到问题,您会很高兴知道您可以在 Foxx 代码中使用相同的 API。

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

于 2014-05-25T16:52:24.223 回答
3
var db = new Database();
db.database('nodetest1')
.then(function (mydb) {return mydb.query('FOR x IN User RETURN x');})
.then(function (cursor) {return cursor.all();})
.then(
  function (list) {console.log(list);},
  function (err) {console.error('Something went wrong:', err);}
);

更多信息 博客 http://www.ashishblog.com/getting-start-with-arangodb-using-nodejs-nodejs-ejs-arangojs/ 源代码 https://github.com/A5hpat/nodeArangoWebApp

于 2015-07-14T01:33:57.850 回答