使用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 {
答案 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(...)
,您最终会创建新的集合。
希望它有所帮助。