我做错了什么或者我不理解$ push(可能不明白)。无论如何,我有以下文件:
{ "_id" : ObjectId("501c83051d41c8753e000000"),
"node" : "denver",
"enc" : { "environment" : "production", "classes" : { "denver" : "" } },
"inherit" : "default" }
我正在尝试制作文件
{ "_id" : ObjectId("501c83051d41c8753e000000"),
"node" : "denver",
"enc" : { "environment" : "production",
"classes" : { "denver" : "", "boulder" : ""} },
"inherit" : "default" }
这就是我的更新语句:
col.update({ 'node' : 'denver'},
{ '$push': { 'enc.classes' : {'boulder': ''}}},
True)
我没有收到错误,但文档永远不会更新。如果我将$ push更改为$ set,那么将使用boulder替换denver。
感谢您的帮助。
答案 0 :(得分:12)
$push
在这种情况下不起作用,因为您试图在对象上使用数组函数。
要使用$push
,您需要将数据结构更改为以下内容:
{
"_id" : ObjectId("501c83051d41c8753e000000"),
"node" : "denver",
"enc" : {
"environment" : "production",
"classes" : [
"denver"
]
},
"inherit" : "default"
}
然后你的查询将是:
col.update(
{
'node' : 'denver'
},
{
'$push': {
'enc.classes' : 'boulder'
}
},
True
)
答案 1 :(得分:7)
此查询有效。
db.foo.update({"node": "denver"}, {"$set": {"enc.classes.boulder": ""}}