我正在尝试使用 C# 驱动程序更新(类型化的)MongoDB 集合中的一行。在处理 MongoCollection<User>
类型的特定集合的数据时,我倾向于避免从集合中检索敏感数据(盐、密码哈希等)
现在我正在尝试更新 User
实例。但是,我从来没有真正检索过敏感数据,所以我猜这个数据应该是 default(byte[])
在我应用修改并将新数据提交到集合之前,在检索到的模型实例中(据我所知)。
也许我正在监督 MongoDB C# 驱动程序中的一些琐碎事情,我如何使用 MongoCollection<T>.Save(T item)
不更新特定属性,例如 User.PasswordHash
或 User.PasswordSalt
?我应该先检索完整记录,更新那里的“安全”属性,然后再写回去吗?或者是否有从更新中排除某些字段的奇特选项?
提前致谢
最佳答案
Save(someValue) 适用于您希望结果记录成为或成为您传入的完整对象 (someValue) 的情况。
你可以使用
var query = Query.EQ("_id","123");
var sortBy = SortBy.Null;
var update = Update.Inc("LoginCount",1).Set("LastLogin",DateTime.UtcNow); // some update, you can chain a series of update commands here
MongoCollection<User>.FindAndModify(query,sortby,update);
方法。
使用 FindAndModify,您可以准确指定现有记录中的哪些字段要更改,而无需考虑其余部分。
您可以查看示例 here .
现有记录中唯一需要的就是它的 _id,这两个 secret 字段不需要加载或映射回您的 POCO 对象。
关于c# - MongoDB:仅更新特定字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14853362/