MongoDB从对象数组

时间:2016-04-12 16:40:53

标签: arrays mongodb mongodb-query subdocument

我有一个看起来像这样的文件:

{
  "_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

1 个答案:

答案 0 :(得分:4)

您需要使用位置$更新运算符从数组中删除元素。你需要这个是因为“sections”是一个子文档数组。

db.test.findOneAndUpdate(
    { "sections._id" : ObjectId("56fea43a571332cc97e06d9e") }, 
    { "$pull": { "sections.$.registered": "e3d65a4e-2552-4995-ac5a-3c5180258d87" } } 
)