【问题标题】:Handling MongoDB schema changes处理 MongoDB 架构更改
【发布时间】:2012-12-10 21:28:56
【问题描述】:

您如何处理生产中的架构更改?

假设我在我的 C# 项目中篡改了一些类,添加了一个由 Dictionary (Key(UInt16),Value(UInt16)) 组成的复杂属性,而 value 有一个默认值,一个整数。您将如何将其添加到您当前的生产环境中的 MongoDB 实例中?

C# 示例: 我正在将此字典添加到现有类中(这显然反映在 MongoDB 作为一个集合):

public Dictionary<SomeEnum, object> SomeSettings = new Dictionary<SomeEnum, object>()
{
 { SomeEnum.BGColor, "#FFFFFF" }, //White
 { SomeEnum.QRColor, "#000000" }, //Black
 { SomeEnum.LogoSize, (UInt16)100 }, //White
 { SomeEnum.MemberDetailsColor, "#000000" }, //Black
 { SomeEnum.BottomTextColor, "#000000" }, //Black
 { SomeEnum.ShowDecreaseButton, true }
}; 

SomeEnum 一个 UInt16 类型的枚举, 这整个字典是一个全新的字段,我想添加到现有集合中,具有这些默认值。你会怎么做?

谢谢!!!

【问题讨论】:

    标签: mongodb mongodb-.net-driver mongodb-query


    【解决方案1】:

    这似乎是一次性操作,因此您可以通过 mongodb shell 来完成。 登录到您的 mongodb 服务器(或 RP 主服务器,如果您使用的是 ReplicaSet)。

    use your_db
    default_dict = {
          uint16_key_a : uint16_value a,
          uint16_key_b : uint16_value b,
          ...
    }
    db.you_collection.update({},{ "$set" : { "your_brand_new_field" :default_dict} },false,true)
    

    更新命令将每个文档的 _your_brand_new_field_ 字段设置为 _default_dict_({} 查询匹配所有内容)。 希望这是你需要知道的。

    【讨论】:

    • 嗨,假设我已经有一个带有字典的字段。字典的值是一个对象,其中包含一个名为“test”的字段。我怎样才能只删除这个字段?
    猜你喜欢
    • 2011-08-11
    • 2019-03-23
    • 2015-03-15
    • 2017-07-25
    • 1970-01-01
    • 2018-04-18
    • 2017-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多