我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。任何帮助都会非常感激??
答案 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 运算符,就像您一样),在这种情况下,您最好有一个索引。正如其他答案所提到的,你也可以在查询字段上有一个空文档,但这往往表现得很差。