C# MongoDbDriver - 未设置,无法使其未设置数据库中的字段

Posted

技术标签:

【中文标题】C# MongoDbDriver - 未设置,无法使其未设置数据库中的字段【英文标题】:C# MongoDbDriver - Unset, Cannot make it unset field in database 【发布时间】:2021-12-04 04:27:18 【问题描述】:

我正在努力寻找实现这一目标的方法。 MongoDbDriver 的文档很差,只有谷歌找到的几个“解决方案”。

我需要通过 C# 迁移脚本从数据库中删除该字段。

var filter = Builders<Person>.Filter.Eq(person => person.Id, personId);
var update = Builders<Person>.Update.Unset(person => person.Address.PostalCode);
collection.UpdateOne(filter, update);

这是我在网上找到的解决方案,但这不起作用。字段仍在数据库中。

我错过了什么?

【问题讨论】:

Unset seems to take a string argument 应该包含要从文档中删除的字段的名称。所以我希望 Unset 应该被称为Unset("SomeParent.FieldToRemove") 也试过了。也不工作... 那你的 MyEntityType 是什么样子的? 我不确定你的意思是什么? MyEntity 确实有一个名为“SomeParent”的属性,并且它有一个带有属性“FieldToRemove”的类型。它没有改变其命名的属性并且没有额外的级别需要考虑?例如:在您的代码中,您有e.SomeParent.FieldToRemove。目前尚不清楚e 的来源。没有理由为什么这不起作用,所以它一定是你的东西与你在这里展示的不同。看看是否可以将示例代码扩展为正确的minimal reproducible example。 【参考方案1】:

刚刚检查,您的上述查询按预期工作,查看前后结果:

更新前:

MongoDB Enterprise replset:PRIMARY> db.p.find()
 "_id" : ObjectId("616ace670b6d6703634faf70"), "Address" :  "PostalCode" : "200"  
 "_id" : ObjectId("616ace660b6d6703634faf6f"), "Address" :  "PostalCode" : "100"  

通过 personId = ObjectId("616ace660b6d6703634faf6f") 更新后

MongoDB Enterprise replset:PRIMARY> db.p.find()
 "_id" : ObjectId("616ace670b6d6703634faf70"), "Address" :  "PostalCode" : "200"  
 "_id" : ObjectId("616ace660b6d6703634faf6f"), "Address" :    

【讨论】:

以上是关于C# MongoDbDriver - 未设置,无法使其未设置数据库中的字段的主要内容,如果未能解决你的问题,请参考以下文章

javascript 如何在mongodbdriver中使用ObjectId?

C# WPF WebBrowser控件调用Refresh()函数出现异常,导致程序“未响应”并无法继续运行

c#中出现了object未定义怎么解决

C# 无法向Oracle数据库插入数据

Discord.NET '对象引用未设置为对象的实例。 C# [重复]

C# 无法在未损坏的 C++ 库上找到入口点