c# - MongoDB C# 驱动程序中的部分更新 - 字典问题

标签 c# mongodb dictionary partial

我正在尝试构建一个通用方法来通过 MongoDB C# 驱动程序处理我的所有部分更新,使用以下方法:

public bool UpdateObject<T>(UpdatableObject<T> updatableObject)
    where T : new()
{
    var builder = GenerateMongoUpdateBuilder(updatableObject.ModifiedFields);
    var collection = GetCollection<T>();
    var result = collection.Update(Query.EQ("_id", BsonValue.Create(updatableObject.Id)), builder, new MongoUpdateOptions { Flags = UpdateFlags.Multi });
    return result.UpdatedExisting;
}

private static UpdateBuilder GenerateMongoUpdateBuilder(Dictionary<string, object> modifiedFields)
{
    var builder = new UpdateBuilder();
    foreach (var modifiedField in modifiedFields)
    {
        var type = modifiedField.Value.GetType();
        if (type.IsPrimitive || type.IsValueType || (type == typeof(string)))
        {
            builder.Set(modifiedField.Key, BsonValue.Create(modifiedField.Value));
        }
        else
        {
            builder.Set(modifiedField.Key, modifiedField.Value.ToBsonDocument());
        }
    }
    return builder;
}

我不得不挣扎了一段时间,直到我找到了通过 BsonValue 处理基本类型和通过 BsonDocument 处理非基本类型的解决方案。一切正常,直到......我们创建了一个包含字典的对象。插入工作完美,但一旦它进入更新(使用此方法) - 它不能再反序列化。查看更新前后 Mongo 中的对象表明它不再是同一个对象 - 更新后它有额外的 _t 字段包含“System.Collections.Generic.Dictionary`2[System.String,[SomeObject, SomeObjectAssembly] ]”

所以我开始质疑我的实现...

知道我做错了什么吗?

谢谢, 尼尔。

最佳答案

在 Robert Stam 的帮助下,问题得到了解决。这一切都在 Jira 项目中进行了描述。 谢谢!

关于c# - MongoDB C# 驱动程序中的部分更新 - 字典问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12088370/

相关文章:

json - 如何解码mongodb数据以构造

mongodb - 如何使用 Mongoose 执行 runCommand?

python - 根据键中的不同值复制相同的数据并创建嵌套字典

c# - 使用 ValueInjecter 将字符串数组映射到对象

c# - 如何在Windows窗体应用程序上实现像网站一样漂亮的用户界面?

c# - 如何将 native C/C++ *.dll 连接到 IIS 中托管的 WCF C#?

c# - 使用 msmq 队列对服务进行负载平衡?

javascript - 根据对子项中父项的引用查找文档

function - Clojure:在函数列表上的单个值上运行映射

python - 修改 `**kwargs` 字典总是安全的吗?