MongoDB:Insert不会修改文档列表?

时间:2014-06-02 14:26:33

标签: list mongodb insert

使用insert在列表中添加新值已完成ok,但文档仍未修改:

> graph = {graph:[
...       {_id:1, links: [2,3,4]},
...       {_id:2, links: [5,6]},
...       {_id:3, links: [7]},
...       {_id:4, links: [9,10]} 
... ]}
{
    "graph" : [
        {
            "_id" : 1,
            "links" : [
                2,
                3,
                4
            ]
        },
        {
            "_id" : 2,
            "links" : [
                5,
                6
            ]
        },
        {
            "_id" : 3,
            "links" : [
                7
            ]
        },
        {
            "_id" : 4,
            "links" : [
                9,
                10
            ]
        }
    ]
}
> db.test.insert(graph)
WriteResult({ "nInserted" : 1 })
> db.runCommand(
...    {
...       insert: "graph",
...       documents: [ {_id:5, links: [1,8]} ]
...    }
... )
{ "ok" : 1, "n" : 1 }

然而,在插入后获取元素没有新的插入元素:

> db.test.find()
  { "_id" : ObjectId("538c8586562938c6afce9924"), "graph" : [ 
       { "_id" : 1, "links" : [ 2, 3, 4 ] }, 
       { "_id" : 2, "links" : [ 5, 6 ] }, 
       { "_id" : 3, "links" : [ 7 ] }, 
       { "_id" : 4, "links" : [ 9, 10 ] } ] }
> 

出了什么问题?

更新

 > db.test.find()
 { "_id" : ObjectId("538c8586562938c6afce9924"), "graph" : [ { "_id" : 1, "links" : [ 2, 3, 4 ] }, { "_id" : 2, "links" : [ 5, 6 ] }, { "_id" : 3, "links" : [ 7 ] }, { "_id" : 4, "links" : [ 9, 10 ] } ] }
> 

db.test.update(
                 {_id : 538c8586562938c6afce9924},
                 {$push : {
                           graph : {{_id:5, links: [1,8]}}
                          }
                 }  

);
2014-06-03T12:35:11.695+0400 SyntaxError: Unexpected token {

1 个答案:

答案 0 :(得分:0)

您必须更新集合。使用db.runCommand()并不是正确的方法。它主要用于在数据库环境中工作,以执行扩展到身份验证,用户管理,角色管理和复制等的任务。db.runCommand()的完整可用性可以在MongoDB文档here中看到。< / p>

最简单的方法是在集合上使用update。此查询可能不适合您的原因之一是没有以适当的方式向MongoDB提供_id

<强> _id : "ObjectId("538dcfaf8f00ec71aa055b15")" or _id : "538dcfaf8f00ec71aa055b15" are not same as _id : ObjectId("538dcfaf8f00ec71aa055b15") for MongoDB 即可。第一个和第二个是字符串类型,而最后一个是ObjectId类型。

db.test.update(
                    {_id : ObjectId("538dcfaf8f00ec71aa055b15")}, //i.e. query for finding the doc to update
                    {$push : {
                               graph : {{_id:5, links: [1,8]}}
                             }
                    },  //performing the update
                    {} //optional parameters
);

但是如果你坚持使用db.runCommand()然后完成同样的事情,你需要按如下方式编写:

db.runCommand ({
                 update: 'Test',
                 updates:
                 [
                    { 
                       q: {_id : ObjectId("538dcfaf8f00ec71aa055b15")},
                       u: {$push : {'graph' : {_id:5, links: [1,8]}}}
                    }
                 ]
              });

您所做的是在“图表”集合中插入内容!您可以在数据库上执行show collections,但由于您的错误db.runCommand(...),您最终会创建新的集合。

希望它有所帮助。