mongodb c# 有条件地组合集合操作

标签 mongodb c#-3.0 mongodb-.net-driver

我正在寻找一种有条件地组合 Set 操作的方法。目前,如果不让更新的定义一个接一个地连续点缀,我无法递增到更新的定义。

例如。而不是:

    Builders<BsonDocument>.Update.Set("someElement.Length", b.Length)
.Set("someElement.Path", b.Path)

我试图找到一种方法来使用某些东西,但徒劳无功:

var update = Builders<BsonDocument>.Update;
bool hasChanged = false;
if (a.Length != b.Length)
{
    hasChanged = true;
    update.Set("someElement.Length", b.Length)
}
if (a.Path != b.Path)
{
    hasChanged = true;
    update.Set("someElement.Path", b.Path)
}

if (hasChanged)
    await someCollection.UpdateOneAsync(Builders<someModel>.Filter.Eq("_id", a.Id), update);

有没有办法做到这一点,还是我在天上追馅饼?我不想替换整个文档,只想更新已更改的字段。

最佳答案

UpdateDefinition 是一个不可变对象(immutable对象),因此对它们的链接操作每次都会创建一个新对象。要有条件地执行此操作,您需要将结果分配回自身,就像 LINQ 一样。

update = update.Set(...);

关于mongodb c# 有条件地组合集合操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35865170/

相关文章:

mysql - 结合 MySQL、Sphinx 和 MongoDB。好主意?

node.js - 如何在没有 _id 引用的情况下获取 GraphqQL 列表中模型的填充值?

c# - 为什么 C# 不允许全局推断类型,即使用 var?

c# - Mongodb C# 驱动程序按嵌套属性排序

mongodb - 如何在 MongoDB 中更改文档属性

c# - MongoDb 的 C# 驱动程序,是否可以将其包装在通用 session 中?

java - mongodb ISODate问题

node.js - 具有ElasticSearch映射和Mongoosastic的MongoDB

.net - ChannelFactory 在端点上没有地址,为什么?

C# AD 用户密码过期