MongoDb查询匹配和删除数组中的元素?

时间:2016-02-22 13:39:51

标签: node.js mongodb

我wana查询并从设施中删除了一个ID,该ID存储了设施ID的数组。 我的架构。

 {
        "_id" : ObjectId("zzzzzzzzzzzzzzzzzzzzz"),
        "account" : {
            "createdOn" : ISODate("2016-02-19T10:31:32.918Z"),

        },
        "appointments" : [],
        "facilities" : [ 
            ObjectId("vvvvvvvvvvvvvvvvvvvvvvvvvvvv"),
            ObjectId("xxxxxxxxxxxxxxxxxxxxxxxxxxxxx")

我尝试了这个,但它删除了整个架构?

  this.remove({ '_id': id, facilities :  { "$in" : [facilityId]} })

此处 id 是此架构的ID, facilityId 是设施的ID。任何帮助都会非常感激??

3 个答案:

答案 0 :(得分:1)

您需要使用$pull指令。

如果你在pull集合中插入元素,如下所示:

db.pulling.insert(
[
{
   _id: 1,
   fruits: [ "apples", "pears", "oranges", "grapes", "bananas" ],
   vegetables: [ "carrots", "celery", "squash", "carrots" ]
},
{
   _id: 2,
   fruits: [ "plums", "kiwis", "oranges", "bananas", "apples" ],
   vegetables: [ "broccoli", "zucchini", "carrots", "onions" ]
}
]
);

然后你可以用以下方法删除胡萝卜:

db.pulling.update(
    { },
    { $pull: { fruits: { $in: [ "apples", "oranges" ] }, vegetables: "carrots" } },
    { multi: true }
); 

$ pull表达式将条件应用于结果数组的每个元素,就像它是顶级文档一样。

答案 1 :(得分:1)

使用$pull来执行此操作

db.facilityIds.update(
    { },
    { $pull: {facilities :  { "$in" : [facilityId]} }} },
    { multi: true }
)

答案 2 :(得分:1)

您想要保留文档并从“设施”数组中删除元素吗?这是吗?

如果是这样,您不希望“删除”,而是“更新”您的文档。

它会像这样:

update(
  {
    "_id": id
  },
  {
    $pullAll:
    {
      "facilities": [facilityId]
    }
  }
)

PS:我想你想要修改它时已经掌握了你的文档ID。如果没有,您可以通过“设施”字段进行查询(使用 $ in 运算符,就像您一样),在这种情况下,您最好有一个索引。正如其他答案所提到的,你也可以在查询字段上有一个空文档,但这往往表现得很差。