簡體   English   中英

如何在ArangoDB中的事務中訪問插入的文檔的_id

[英]How do I access inserted document's _id within a transaction in ArangoDB

在事務中,我看不到任何訪問已插入/已更新文檔密鑰的示例。

var collections = {write: ['foo','bar']};
var action = String(function () {
    var doc = params['doc'];
    var relatedDoc = params['relatedDoc'];
    var db = require('internal').db;
    db.foo.save(doc); // how do I access the _id, key etc of the newly inserted doc?
    relatedDoc.foos.push(doc._id); // _id does not exist yet
    db.bar.save(relatedDoc);
    return {success: true};
});
var params = {
    doc: doc,
    relatedDoc: relatedDoc
};
db.transaction(collections, action, params, function (err, result) {
    if (err) {
        return dfd.reject(err);
    }
    return dfd.resolve(result);
});

collection.save()方法將為保存的文檔返回一些元數據:

  • _rev :文檔修訂版ID(由服務器自動生成)
  • _key :文檔密鑰(由用戶在_key屬性中指定,或者由服務器自動生成)
  • _id :與鍵相同,但還包含集合名稱

要在代碼中使用生成的ID,可以在變量中捕獲collection.save()的結果,並按以下方式使用它:

var collections = {write: ['foo','bar']};
var action = String(function () {
    var doc = params['doc'];
    var relatedDoc = params['relatedDoc'];
    var db = require('internal').db;
    var newDoc = db.foo.save(doc);     // capture result of save in newDoc
    relatedDoc.foos.push(newDoc._id);  // use newDoc._id for 
    db.bar.save(relatedDoc);
    return {success: true};
});
var params = {
    doc: doc,
    relatedDoc: relatedDoc
};
db.transaction(collections, action, params, function (err, result) {  
  if (err) {
      return dfd.reject(err);
    }
    return dfd.resolve(result);
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM