2014-05-25 35 views
3

我來自MongoDB,現在我想使用ArangoDb來使用ACID事務。我只使用NodeJS進行編程。ArangoDB + 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」的文檔,但我怎麼可以指定到至極的數據庫?

另外,你可以給我舉例說明如何在字段上使用唯一索引來確保'確保索引','更新$設置字段和findOne,就像在MongoDB中一樣?

您也可以使用這些NPM軟件包編寫代碼。但我帶來的唯一方法是通過HTTP REST API ..

拜託,謝謝。我喜歡那個ArangoDb,因爲它的開源,提供ACID交易。但是,主要的缺點是缺乏教程,和缺乏示例代碼...

*此外,我需要:在收集現場的UPDATE,如果不存在,請創建它:*

在這裏你可以看到一個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

您的收藏全部在_system數據庫中結束的原因是您沒有在URL中使用數據庫。如果你想使用例如my_database而不是默認數據庫(即_system),您應該使用/db/my_database/_api/而不是簡單地/_api/。您可以在[數據庫的HTTP API]中找到有關處理多個數據庫的更多信息。

我對MongoDB並不是很熟悉,但我認爲相當於ensureIndex將會在/_api/index集合之後以相同的參數和數據進行POST。根據API documentation for indices,服務器將在200(如果該索引已存在)或201(如果已創建)下回答。

相當於$set可能是對文檔的補丁,它將更新文檔而不是覆蓋文檔。從the documentation on HTTP PATCH for documents

所有的補丁文件將被添加到現有的文檔,如果他們不存在,並覆蓋現有文件中,如果確實存在有他們的屬性。

最接近的findOne等於firstExample simple query。它只支持完全匹配,但是,對於實際查詢,您應該使用它的查詢語言which also has an HTTP API

我是ArangoDB的一個node.js「驅動程序」的作者,我終止了它。我決定不繼續開發它的原因是,直接使用HTTP API可能不是將ArangoDB集成到項目中最有用的方法。

ArangoDB附帶自己的JavaScript環境,稱爲Foxx。不用通過網絡發送查詢字符串並在節點代碼中調用多個REST端點,使用Foxx創建您自己的特定於域的HTTP API是一個更好的主意,它可以讓您將底層數據庫特定的調用抽象出來。除了爲您提供涵蓋HTTP API全部功能的純JS API之外,Foxx還允許您在發生故障時自動回滾執行事務

如果您可以編寫node.js代碼,則可以編寫Foxx代碼。該Foxx documentation包括一個教程,應該讓你開始。如果您使用的是ArangoDB的交互式shell arangosh,那麼如果您在使用Foxx模型邏輯時遇到問題,則很高興知道您可以在Foxx代碼中使用相同的API。

使用Foxx的唯一缺點是您需要將您的Foxx應用程序部署到數據庫(除了將node.js代碼部署到您的node.js服務器),但實際上這不應該使您的項目部署更加困難。

+0

也感謝,我會嘗試上面提到的驅動程序。另外我會研究FOXX。這兩種方法似乎都很有趣。我明確需要ACID交易。那樣我比mongoDB更喜歡arangoDB – europeanguy

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 
}); 
+0

謝謝我會嘗試使用這個。 – europeanguy