Node.js ArangoDB+;NodeJS=需要以下任务的工作示例代码

Node.js ArangoDB+;NodeJS=需要以下任务的工作示例代码,node.js,arangodb,Node.js,Arangodb,我来自MongoDB,现在我想使用ArangoDb来使用ACID事务。我使用NodeJS只是为了编程 我遇到的问题如下,我无法将NPM代码示例付诸实践 有3个NPM包,其中包含用于NodeJ的驱动程序。 这些代码示例都不起作用 然后,当我尝试使用HTTP REST API时,它们至少可以部分工作。 下面是一种访问ArangoDB的HTTP REST API方法 但是,如何指定文档应该插入到哪个数据库中?它总是将其插入到_System-Database中。这是我不想要的 在这里你可以看到我的代码

我来自MongoDB,现在我想使用ArangoDb来使用ACID事务。我使用NodeJS只是为了编程

我遇到的问题如下,我无法将NPM代码示例付诸实践

有3个NPM包,其中包含用于NodeJ的驱动程序。 这些代码示例都不起作用

然后,当我尝试使用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);
    }
   });

您的收藏最终都会出现在
\u系统
数据库中,这是因为您没有在URL中使用数据库。如果要使用例如
my\u数据库
而不是默认数据库(即
\u系统
),则应使用
/db/my\u数据库/\u api/
,而不是简单地使用
/\u api/
。您可以在[HTTP API for databases]中找到有关使用多个数据库的更多信息

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

相当于
$set
的可能是对文档进行修补,这将更新文档而不是覆盖文档。发件人:

如果修补程序文档中的所有属性尚不存在,它们将添加到现有文档中,如果存在,则在现有文档中覆盖

findOne
最接近的等价物可能是。它只支持精确匹配,但是,对于实际查询,您可能应该使用它的查询语言

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

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

如果可以编写node.js代码,那么就可以编写Foxx代码。包括一个教程,应该可以让您开始学习。如果您使用过ArangoDB的交互式shell
arangosh
,您会很高兴知道,如果您在Foxx的模型逻辑方面遇到问题,您可以在Foxx代码中使用相同的API

使用Foxx的唯一缺点是需要将Foxx应用程序部署到数据库中(除了将node.js代码部署到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
});
更多信息

也谢谢,我会尝试上面提到的驱动程序。我也会研究FOXX。这两种方法似乎都很有趣。我确实需要ACID事务。这就是我喜欢arangoDB而不是mongoDBLinks的方式。现在有一个官方的JS/TS驱动程序使大部分信息变得无关紧要:第一个链接断开了
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);}
);