使用MongoDB C#驱动程序从所有文档中删除数组元素

使用MongoDB C#驱动程序从所有文档中删除数组元素,c#,mongodb,driver,C#,Mongodb,Driver,鉴于以下情况: { "_id" : 1, "name" : "Nature", "area": [ { "place": "Some place", "discoveredBy": "" }, { "place": "Some place 2", "discoveredBy": "" } ], "_

鉴于以下情况:

{
    "_id" : 1,
    "name" : "Nature",
    "area": [
        {
            "place": "Some place",
            "discoveredBy": ""
        },
        {
            "place": "Some place 2",
            "discoveredBy": ""
        }
    ],
    "_id" : 2,
    "name" : "Tropics",
    "area": [
        {
            "place": "Some place",
            "discoveredBy": ""
        },
        {
            "place": "Some place 2",
            "discoveredBy": ""
        }
    ]
}
在代码中,我删除了discoveredBy属性。现在如何使用C#驱动程序更新(取消设置)我的整个数据库,以便同时删除discoveredBy?生成的db应该如下所示:

{
    "_id" : 1,
    "name" : "Nature",
    "area": [
        {
            "place": "Some place"
        },
        {
            "place": "Some place 2"
        }
    ],
    "_id" : 2,
    "name" : "Tropics",
    "area": [
        {
            "place": "Some place"
        },
        {
            "place": "Some place 2"
        }
    ]
}
当前,当尝试在我的代码更改后执行查找时,它失败,因为DiscoveryBy属性不再位于代码中,并且序列化进程无法找到存储已删除属性的位置,该属性仍然存在于数据库中。因此,需要将该字段全部从数据库中删除

使用解决方案更新:

感谢所有的输入人员,但这不是重复的,因为当我尝试使用新的驱动程序在C#中运行时,我尝试的一切似乎都被弃用了。不管怎样,这是我最终决定的解决办法。这里的关键是使用“$[]”,根据MongoDB的说法,这是从3.6版开始的新版本。有关更多信息,请参阅

代码如下:

{
   var filter = Builders<Scene>.Filter.Where(i => i.ID != null);
   var update = Builders<Scene>.Update.Unset("area.$[].discoveredBy");
   var result = collection.UpdateMany(filter, update, new UpdateOptions { IsUpsert = true});
}
{
var filter=Builders.filter.Where(i=>i.ID!=null);
var update=Builders.update.Unset(“area.$[].discoveredBy”);
var result=collection.UpdateMany(过滤器、更新、新更新选项{IsUpsert=true});
}

在您的情况下,请执行以下操作:

db.collectionname.find({}).forEach(function(item) {
var ar = item.area;
for(var i = 0; i < ar.length; ++i) { 
    var x = ar[i];
    delete (x["discoveredBy"]);

}
db.collectionname.save(item);});
db.collectionname.find({}).forEach(函数(项){
var ar=项目面积;
对于(var i=0;i
这是否是一个过时的C#示例?例如,对于最新的驱动程序,“保存”似乎已被弃用,而“删除”在何处找不到。如果您发现一个解决方案没有在副本中给出,则应将其添加到该解决方案中。@DourHighArch done