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()函数出现异常,导致程序“未响应”并无法继续运行