MongoDB中的多语言属性

时间:2014-02-09 00:18:59

标签: mongodb schema multilingual

我正在尝试在MongoDB中设计一个模式范例,它支持文档中变量属性的多语言值。

例如,我会有一个产品目录,其中每个产品可能要求以各种语言存储其名称,标题或任何其他属性。 同样的范例应该适用于其他特定于语言环境的属性,例如价格/货币变化

我一直在考虑一种键值方法,其中key是语言代码,value是相应的值:

 { 
      sku: "1011",
      name: { "en": "cheese", "de": "Käse", "es": "queso", etc... },
      price: { "usd": 30.95, "eur": 20, "aud": 40, etc... }
 } 

问题是我相信这会让我无法在多语言领域使用索引。 最后,我想要一个通用但直观,可索引的设计。

任何建议都将不胜感激,谢谢。

1 个答案:

答案 0 :(得分:6)

对您的架构设计的批评建议可能有点广泛讨论这里的主题。但是,我可以建议您考虑将显示的元素放入子文档的 Array 中,而不是将每个项目的字段放在单个子文档中。

{ 
    sku: "1011",
    name: [{ "en": "cheese" }, {"de": "Käse"}, {"es": "queso"}, etc... ],
    price: [{ "usd": 30.95 }, { "eur": 20 }, { "aud": 40 }, etc... ]
} 

这样做的主要原因是要考虑元素的访问路径,这样可以更容易查询。我详细介绍了here,这可能值得你阅读。

也可以扩展名称字段之类的内容:

    name: [
        { "lang": "en", "value": "cheese" },
        { "lang": "de", "value: "Käse"  },
        { "lang": "es", "value": "queso" },
        etc...
    ]

所有这些都取决于您的索引和访问要求。这一切都取决于您的应用程序究竟需要什么,而MongoDB的优点在于它允许您根据需要构建文档。

P.S至于你存储 Money 值的任何内容,我建议你做一些阅读,也许可以在这里发帖:

MongoDB - What about Decimal type of value?