【问题标题】:Partial Update in MongoDB C# Driver - Dictionary issueMongoDB C# 驱动程序中的部分更新 - 字典问题
【发布时间】:2012-08-25 15:49:42
【问题描述】:

我正在尝试构建一个通用方法来通过 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] ]"

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

知道我做错了什么吗?

谢谢, 尼尔。

【问题讨论】:

  • 这听起来很像一个错误。我建议您获得更好的复制说明并前往他们的jira site 报告它
  • 当你对它执行 .ToBsonDocument() 时 Dictionary 的结果是什么?
  • 结果如下: { "_t" : "System.Collections.Generic.Dictionary`2[System.String,[SomeObject, SomeObjectdll]]", "_v" : { "f5030d52-cd70 -404f-a3b4-072b6261e2c3" : { "_id" : 0, "Name" : "Test" }, ...此处的其他条目 ...
  • @kelloti - 谢谢,我在 Jira 网站上打开了一个问题:jira.mongodb.org/browse/CSHARP-548

标签: c# mongodb dictionary partial


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-05
    • 1970-01-01
    • 1970-01-01
    • 2013-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多