从数组中删除子文档

时间:2014-06-25 11:21:20

标签: c# mongodb mongodb-.net-driver

鉴于以下数据,我想删除"data" "k" == "c"中的所有子文档。那是我的代码:

var query = Query.EQ("templateId", "537c6648d7d6bd0a68a34918");
var update = Update.Pull("data", new BsonDocument() { { "k", "c" } });
MyMongoCollection.Update(query, update);

所以会发生的是,正好有1个文档受到影响,更新停止。我验证了查询,它按预期返回所有文档。只需进行拉动更新,它就会中断。

可能出现什么问题?

WriteConcern没有错误。查询单独返回3个文档,WriteConcern有1个文档受影响。

{
    "_id" : ObjectId("537c85a2d7d6bd0a68a3491b"),
    "templateId" : "537c6648d7d6bd0a68a34918",
    "data" : [ 
        {"k" : "b", "v" : "111"}, 
        {"k" : "a", "v" : "222"}, 
        {"k" : "c", "v" : "333"}
    ]
},
{
    "_id" : ObjectId("537d6a41d7d6bd0608cb27a4"),
    "templateId" : "537c6648d7d6bd0a68a34918",
    "data" : [ 
        {"k" : "b", "v" : "111"}, 
        {"k" : "a", "v" : "222"}, 
        {"k" : "c", "v" : "333"}
    ]
}

1 个答案:

答案 0 :(得分:1)

要更新多个文档,您应将update flags设置为Multi

MyMongoCollection.Update(query, update, UpdateFlags.Multi);

这将删除所有文档中的子文档。

来自MongoDB文档:

  

默认情况下,update()方法更新匹配的单个文档   它的选择标准。在multi选项设置为的情况下调用方法   如果要更新多个文档,则为true。