使用猫鼬的另一个问题。我想在文档中更新task
,如下所示。
例如,我想使用completed
_id=1
收件箱中的project
更新任务中的name
字段。
是否可以在一个查询中执行?
{
"_id" : ObjectId("5702e0c732faf57c7bb9ebe9"),
"email" : "john@doe.me",
"projects" : [
{
"_id" : "1",
"name" : "inbox",
"tasks" : [
{
"_id" : "1",
"text" : "First task",
"labels" : [
"home",
"phone"
],
"dueDate" : "2016-03-18T11:10:00",
"created" : "2016-03-10T10:10:00",
"completed" : true
},
{
"_id" : "2",
"text" : "Second task",
"labels" : [
"home",
"phone"
],
"dueDate" : "2016-03-18T11:10:00",
"created" : "2016-03-10T10:10:00",
"completed" : false
},
]
},
{
"_id" : "2",
"name" : "work",
"tasks" : [
{
"_id" : "4",
"text" : "Fourth",
"labels" : [
"home",
"phone"
],
"dueDate" : "2016-03-18T11:10:00",
"created" : "2016-03-10T10:10:00",
"completed" : false
}
]
}
]
}
答案 0 :(得分:4)
在Mongo中,无法一次查询和更新嵌套数组。此处需要的位置$
运算符不支持遍历嵌套数组。
位置$运算符不能用于遍历多个数组的查询,例如遍历嵌套在其他数组中的数组的查询,因为$ placeholder的替换是单个值
有关详细信息,请参阅this issue。
答案 1 :(得分:0)
是的可能。您需要使用位置运算符。请试试这个:
db.yourCollection.update({
"_id" : ObjectId("5702e0c732faf57c7bb9ebe9"),
'projects.tasks._id': '1'
},
{ $set: { 'projects.tasks.$.completed': newData }}
)