【问题标题】:Create document in arangoDB with node.js使用 node.js 在 arangoDB 中创建文档
【发布时间】:2013-04-01 15:32:18
【问题描述】:

传递 json 文档进行创建的正确方法是什么?

我的示例工作正常,如下所示: /* 在集合中创建一个新文档 */

db.document.create({a:"test"},function(err,ret){
if(err) console.log("error(%s): ", err,ret);
else console.log(util.inspect(ret));
});

但是我如何将 json 作为参数传递,因为这不起作用?

var json = '{a:"test"}';

db.document.create(json,function(err,ret){
if(err) console.log("error(%s): ", err,ret);
else console.log(util.inspect(ret));

});

【问题讨论】:

    标签: node.js arangodb


    【解决方案1】:

    查看上面 Kaerus 存储库中的“create”函数,创建函数为:

    "create": function() {
      var collection = db.name, data = {}, options = "", callback, i = 0;
      if(typeof arguments[i] === "boolean"){ 
        if(arguments[i++] === true)
          options = "&createCollection=true";
      } 
      if(typeof arguments[i] === "string") collection = arguments[i++];
      if(typeof arguments[i] === "object") data = arguments[i++];
      if(typeof arguments[i] === "function") callback = arguments[i++];
      return X.post(xpath+collection+options,data,callback);
    },
    

    所以你要么需要将它作为 JavaScript 对象传递,即调用

    JSON.parse('{"a":"test"}')
    

    将 JSON 表示转换为 JavaScript 对象或修补 Kaerus 客户端 允许行中的对象或字符串

    if(typeof arguments[i] === "object") data = arguments[i++];
    

    (这可能会导致可选参数出现问题)。

    注意:在任何情况下,“json”都必须包含有效的 JSON 表示。

    { a: "Test" }
    

    无效,

    { "a": "Test" }
    

    是。

    【讨论】:

    • 我的数据在一个流中,所以它是一个缓冲区。我将其转换为字符串,然后对其进行 JSON.parse。这不起作用,我得到一个“404”响应。 JSON 是有效的(此处测试的缓冲区上的“console.log”的输出:jsonlint.com)。如果我直接传入数据,它工作正常...非常混乱...
    • 好吧,这很奇怪。 404 并不意味着“损坏的 JSON”,而是“找不到集合”。您可以尝试以下操作: db.document.create("COLLECTIONNAME",json,function(err,ret){ if(err) console.log("error(%s): ", err,ret); 否则控制台。 log(util.inspect(ret)); 其中 COLLECTIONNAME 是您正在使用的集合的名称?
    • 我试过了,404错误已修复。它创建了一个文档,但没有任何传入的 json 数据,我只填充了 _id、_key 和 _rev 字段。 'create' 的回调没有被调用,因此 2 个控制台行没有输出。
    【解决方案2】:

    看看这个单元测试:https://github.com/kaerus/arango-client/blob/master/test/api/document.js

    试试

     var json = {"a":"test"};
    

    【讨论】:

    • 谢谢你,我有一个头脑风暴!根据您的评论,我正在使用流数据调用 arango 客户端函数,该流数据将成为缓冲区,并且我已将其转换为显然不被接受的字符串。我想我需要知道的是如何从字符串(或缓冲区)中获取您建议的格式。
    • JSON.parse(yourJsonString); 怎么样? ?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多