【问题标题】:Update with AddToSet not updating null value with MongoDB C#使用 AddToSet 更新不使用 MongoDB C# 更新空值
【发布时间】:2012-04-12 15:40:08
【问题描述】:

使用 MongoDB,当数组为空时,我无法将 en 元素添加到数组中。如果我从控制台添加项目,AddToSet 会按预期工作。我正在使用 10gen 的官方 C# 驱动程序。

var query = Query.EQ("_id", objectId);          
var itemDoc = item.ToBsonDocument();

//items is an array but currently null
var update = MongoDB.Driver.Builders.Update.AddToSet("items", itemDoc); // YUNoWork?

//somefield doesn't exist
var workingUpdate = MongoDB.Driver.Builders.Update.AddToSet("somefield", itemDoc); //works fine

var collection = DataBase.GetCollection<MyObject>(CollectionName);

collection.Update(query, update); // doesn't work
collection.Update(query, workingUpdate); // works

这是预期的行为吗?如果是这样,是否有更通用的方法将项目添加到数组中?

【问题讨论】:

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


    【解决方案1】:

    进行了一些挖掘,according to some other comments - 就像你说的,如果元素不存在,它可以工作,但如果它是 null - 它就不起作用。显然这是设计使然。

    一个建议是将 BsonIgnoreIfNull 属性添加到数组中,这意味着您的 AddToSet 将起作用。

    【讨论】:

    • 对列表使用 BsonIgnoreIfNull 可解决 C# 类定义和 MongoDB 之间的阻抗不匹配问题。谢谢!
    • 只是为了向看到此答案的其他人澄清,您必须清理现有数据才能使其正常工作。换句话说,如果您已经有一个具有空属性的文档,则必须删除该属性或该文档。 那么这将在您下次使用 AddToSet 时起作用。我已经添加了属性,但它仍然不起作用,因为数据已经用null保存了。
    【解决方案2】:

    放一个空数组,而不是空值。

    【讨论】:

      猜你喜欢
      • 2015-07-07
      • 1970-01-01
      • 2013-06-05
      • 1970-01-01
      • 1970-01-01
      • 2021-04-23
      • 1970-01-01
      • 1970-01-01
      • 2013-12-14
      相关资源
      最近更新 更多