mongodb $pull 不适用于子文档中的数组
mongodb $pull doesn't work with array in subdocument
我对 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 return 我这个:
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,我验证了要删除的值。
任何人都可以有想法吗?
所以,我找到了一个带有 $[]
标识符的解决方案。这不是它的基本实用程序,但它适合我的情况。
一个任务ID不能在2个位置,它属于1个而且只有1个仪表板。所以如果你提出这样的请求:
db.Project.findOneAndModify({
"dashboard_group._id": dgr_id
}, {
$pull: {
"dashboard_group.$[].dgr_tasks": id2
}
});
Mongo 将删除所有匹配 id2 的值。如果没有 {multi: true}
选项,它将进行 1 次更新,并且我的项目确实从我的嵌套数组中删除。
您将需要 select 使用 "$elemMatch"
的特定数组元素,像这样
查询:{"dashboard_group":{"$elemMatch":{dgr_name:"My Dashboard"}}}
更新:{$pull:{"dashboard_group.$.dgr_tasks":"id2"}}
我对 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 return 我这个:
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,我验证了要删除的值。
任何人都可以有想法吗?
所以,我找到了一个带有 $[]
标识符的解决方案。这不是它的基本实用程序,但它适合我的情况。
一个任务ID不能在2个位置,它属于1个而且只有1个仪表板。所以如果你提出这样的请求:
db.Project.findOneAndModify({
"dashboard_group._id": dgr_id
}, {
$pull: {
"dashboard_group.$[].dgr_tasks": id2
}
});
Mongo 将删除所有匹配 id2 的值。如果没有 {multi: true}
选项,它将进行 1 次更新,并且我的项目确实从我的嵌套数组中删除。
您将需要 select 使用 "$elemMatch"
的特定数组元素,像这样
查询:{"dashboard_group":{"$elemMatch":{dgr_name:"My Dashboard"}}}
更新:{$pull:{"dashboard_group.$.dgr_tasks":"id2"}}