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