【问题标题】:Why MongoDB update affects a single document only?为什么 MongoDB 更新只影响单个文档?
【发布时间】:2014-10-15 08:49:37
【问题描述】:

我有一个包含以下“模式”的集合:

{
   "_id": { "$oid": "543cd94799c3ff7a2850a1b6" },
   "Type": 1,
   "Information": [
     {
       "Type" : 2,
       "Colors": [],
       "Heights": [],
       "Widths": []
     }
   ]
}

我有嵌套在数组“信息”中的“颜色”、“高度”、“宽度”数组。

我正在尝试使用以下更新查询更新集合中的一些文档:

var query = Query.And(Query.Exists(Entity.INFORMATION + "." + Information.COLORS),
                  Query.Exists(Entity.INFORMATION + "." + Information.HEIGHTS),
                  Query.Exists(Entity.INFORMATION + "." + Information.WIDTHS), 
                  Query.EQ(Entity.TYPE, typeId),
                  Query.ElemMatch(Entity.INFORMATION, Query.EQ(Information.TYPE, informationTypeId)));

var update = MongoDB.Driver.Builders.Update.Set(Entity.INFORMATION + ".$." + Information.WIDTHS, new BsonArray(new Width[0]))
                                       .Set(Entity.INFORMATION + ".$." + Information.COLORS, new BsonArray(new Color[0]))
                                       .Set(Entity.INFORMATION + ".$." + Information.HEIGHTS, new BsonArray(new Height[0]))
                                       .Set(Entity.INFORMATION + ".$." + Information.TYPE, BsonNull.Value);

Collection.Update(query, update, UpdateFlags.Multi);

似乎只有第一个文档受到影响。其余的不受影响。

如何修复此更新查询以使其也适用于其余文档?我使用了 UpdateFlags.Multi 但没有运气..

我想将信息类型设置为空并清除信息数组中的嵌套数组。

【问题讨论】:

  • 有没有人可以真正帮助我解决这个问题?
  • 这看起来是正确的。您能否尝试在 shell 中执行此查询并查看它是否涉及多个文档?
  • 我会在家里试试,然后告诉你。
  • 它不起作用。还有其他帮助吗?

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


【解决方案1】:

好的,我已经展平了信息,现在我只有一层数组。

所以,现在可以工作了。

谢谢大家。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-30
    • 1970-01-01
    • 2019-11-11
    • 1970-01-01
    • 2021-10-18
    相关资源
    最近更新 更多