使用MongoDB进行更新时遇到问题。
我的架构如下所示:
Project: {
_id: ObjectId(pro_id)
// some data
dashboard_group: [
{
_id: ObjectId(dgr_id)
dgr_name: "My Dashboard"
dgr_tasks: [
id1,
id2,
...
]
},
// other dashboards
]
}
我想删除id2,但$ pull运算符似乎不起作用。 Mongo回复了我:
result: {
lastErrorObject: {
n: 1,
updatedExisting: true
},
ok: 1
}
这是我的要求:
db.Project.findOneAndUpdate({
"dashboard_group._id": dgr_id
}, {
$pull: {
"dashboard_group.$.dgr_tasks": id2
}
});
dgr_id在查询之前已经转换为ObjectId,我验证了我要删除的值。
任何人都可以有想法吗?
答案 0 :(得分:0)
所以,我找到了一个带有$[]
标识符的解决方案。这不是它的基本功能,但它适合我的情况。
任务ID不能位于2位置,它属于1且只有1个仪表板。因此,如果您提出以下请求:
db.Project.findOneAndModify({
"dashboard_group._id": dgr_id
}, {
$pull: {
"dashboard_group.$[].dgr_tasks": id2
}
});
Mongo将删除与id2匹配的所有值。如果没有{multi: true}
选项,它将进行一次更新,我的项目确实从我的嵌套数组中删除。
答案 1 :(得分:0)
您需要使用"$elemMatch"
这样的
查询:{"dashboard_group":{"$elemMatch":{dgr_name:"My Dashboard"}}}
更新:{$pull:{"dashboard_group.$.dgr_tasks":"id2"}}