我有一个看起来像这样的文件:
{
"_id" : ObjectId("56fea43a571332cc97e06d9c"),
"sections" : [
{
"_id" : ObjectId("56fea43a571332cc97e06d9e"),
"registered" : [
"123",
"e3d65a4e-2552-4995-ac5a-3c5180258d87"
]
}
]
}
我想删除'e3d65a4e-2552-4995-ac5a-3c5180258d87'
registered
_id
数组<{1>} {/ 1>} '56fea43a571332cc97e06d9e'
db.test.findOneAndUpdate(
{
$and: [
{'sections._id': ObjectId('56fea43a571332cc97e06d9e')},
{'sections.registered': 'e3d65a4e-2552-4995-ac5a-3c5180258d87'}
]
},
{
$pull: {
$and: [
{'sections._id': ObjectId('56fea43a571332cc97e06d9e')},
{'sections.registered': 'e3d65a4e-2552-4995-ac5a-3c5180258d87'}
]
}
})
$pull
的{{1}}。
我目前的尝试是这样的,但它只是返回未修改的原始文档。
$pull
我已经查看了registered
,但我似乎无法弄清楚如何让它在包含另一个数组的嵌套对象数组上运行。 sections
示例似乎只涉及一个嵌套级别。如何从_id
数组中的executeFetchRequest
数组中删除匹配的条目以及我提供的NSManagedObject
?
答案 0 :(得分:4)
您需要使用位置$
更新运算符从数组中删除元素。你需要这个是因为“sections”是一个子文档数组。
db.test.findOneAndUpdate(
{ "sections._id" : ObjectId("56fea43a571332cc97e06d9e") },
{ "$pull": { "sections.$.registered": "e3d65a4e-2552-4995-ac5a-3c5180258d87" } }
)