使用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