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

我wana查询并从存储一系列设施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。 任何帮助将非常感激?

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

如果是这样,你不想“ 删除 ”,而是“ 更新 ”你的文件。

它会像这样:

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

PS:我想你已经有你的文件ID,当你想修改它。 如果没有,你可以通过“设施”字段查询(使用$ in操作符,就像你一样),在这种情况下,你最好有一个索引。 您也可以像其他答案中提到的那样在查询字段上有一个空文档,但是这往往performance得很差。

你需要使用$ 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 } ); 

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

$pull来做到这一点

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