【问题标题】:Concept: Is mongo right for applying schemas?概念:mongo 是否适合应用模式?
【发布时间】:2012-04-14 04:30:54
【问题描述】:

我目前负责检查我们即将在 mongo 上开发的产品之一是否有价值。

不做太多详细说明,我将尝试解释一下,该应用程序的作用。

该应用程序只有“实体”。这些实体是技术性的东西,例如手机、电视、笔记本电脑、平板电脑等。

当然,除了平板电脑,手机还有其他属性,笔记本电脑甚至还有其他属性,比如 RAM、CPU、显示器尺寸等。

现在我想要一些我们想要称之为方案的东西:我们定义我们需要保存平板电脑的显示大小、闪存设备的内存大小、处理器类型、处理器速度等。对于手机,我们可能会节省显示尺寸、GSM、Edge、3g、4g、处理器、内存、触摸屏技术、bla bla bla。我想你明白了:)

我想要实现的是,每个“类别”都有一个架构,当系统的一个用户输入一个新产品(比如说新的 iphone 4)时,应用程序会构建一个表格,用适当的内容填写属性。

到目前为止,这听起来不错,应该不是 mongo 的问题。但是现在我无法找到一个干净的解决方案来解决这个问题......

在 mongo 中建模的属性如下所示:

{
_id: 1234456, name: "Attribute name", type: 0, "description"
}

但是,如果我需要多种语言的此属性,该怎么办,例如:

{
en: {name: "Attribute name", type: 0, "description"},
de: {name: "Name des Attributs, type: 0, "Beschreibung"}
}

我还需要确保在更新英语后立即更新 German 属性,例如当类型从 0 更改为 1 时。

对此有什么想法吗?

【问题讨论】:

    标签: node.js mongodb globalization concept database-relations


    【解决方案1】:

    mongo 数据库中的文档可以在一个update 语句中更新其任何或所有属性。没有触发器 - 如果您希望在类型属性更改时更新文档,您需要在应用程序逻辑中执行此操作。

    【讨论】:

      【解决方案2】:

      您可以通过多种不同的方式解决此问题。

      您可以在属性文档中嵌入一系列语言翻译:

      {
          _id: 1234, 
          type: 0,
          somethingElse : "foobar",
          translation: [
              "en" : { name: "Attribute name", description : "Description" }
              "de" : { name: "Name des Attributs", description: "Beschreibung" }
          ]
      }
      

      或者您可以将翻译分离到一个单独的集合中,您可以在其中存储翻译键和该键的所有语言的翻译。

      或者您也可以使用您的模型并一次更新多个属性。

      这一切都取决于你的喜好。

      【讨论】:

        【解决方案3】:

        对于 MongoDB,确保文档内或文档之间的逻辑关系(例如,每个描述必须以这五种语言出现)的任务是客户端程序的责任。可以进行查询以查找符合或不符合您的规范的文档,但数据库本身不会阻止您存储不符合您的规范的文档(唯一索引等特殊情况除外)。

        MongoDB 相对于关系数据库的优势在于能够随着您的需求变化而随时间扩展您的架构。从性能的角度来看,无需往返整个文档(使用 $set 或 $push 或其他更新功能)即可将更新推送到数据库的能力可能会有所帮助,并且在各种复合字段上灵活索引的能力可以使查询快速.

        如果我了解您的用例,数据总量将相对较小(几千个文档,每个不超过几 KB),因此可以在适度的系统上放入 RAM,因此速度很快。但是您将编写客户端逻辑来强加您想要的结构和关系。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-07-01
          • 1970-01-01
          • 1970-01-01
          • 2012-05-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多