我有这个系列:
[{ "_id" : 7,
"category" : "Festival",
"comments" : [
{
"_id" : ObjectId("4da4e7d1590295d4eb81c0c7"),
"usr" : "Mila",
"txt" : "This is a comment",
"date" : "4/12/11"
}
]
}]
我想要的只是在这样的评论中插入一个新字段:
[{ "_id" : 7,
"category" : "Festival",
"comments" : [
{
"_id" : ObjectId("4da4e7d1590295d4eb81c0c7"),
"usr" : "Mila",
"txt" : "This is a comment",
"date" : "4/12/11",
"type": "abc" // find the parent doc with id=7 & insert this inside comments
}
]
}]
如何在comments子文档中插入?
答案 0 :(得分:77)
您需要使用the $ positional operator
例如:
update({
_id: 7,
"comments._id": ObjectId("4da4e7d1590295d4eb81c0c7")
},{
$set: {"comments.$.type": abc}
}, false, true
);
我没有测试它,但我希望它会对你有所帮助。
如果您想更改需要使用的文档结构
db.collection.update(条件, objNew,upsert,multi)
参数:
criteria - query which selects the record to update; objNew - updated object or $ operators (e.g., $inc) which manipulate the object upsert - if this should be an "upsert"; that is, if the record does not exist, nsert it multi - if all documents matching criteria should be updated
并插入具有新结构的新objNew。 check this for more details
答案 1 :(得分:3)
如果'comments'字段不是数组,$ position运算符只会按预期工作。 OP的json格式不正确,但看起来它可能是一个数组。
问题是mongodb现在只会更新与查询匹配的数组的第一个元素。虽然有一个RFE打开,可以添加对更新所有匹配数组元素的支持:https://jira.mongodb.org/browse/SERVER-1243
要解决这个数组问题,您只需要进行常规查找,然后单独更新数组中的元素。