MongoDB中的多语言属性

Che*_*enR 7 multilingual schema mongodb

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

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

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

 { 
      sku: "1011",
      name: { "en": "cheese", "de": "Käse", "es": "queso", etc... },
      price: { "usd": 30.95, "eur": 20, "aud": 40, etc... }
 } 
Run Code Online (Sandbox Code Playgroud)

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

任何建议将不胜感激,谢谢.

Nei*_*unn 6

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

{ 
    sku: "1011",
    name: [{ "en": "cheese" }, {"de": "Käse"}, {"es": "queso"}, etc... ],
    price: [{ "usd": 30.95 }, { "eur": 20 }, { "aud": 40 }, etc... ]
} 
Run Code Online (Sandbox Code Playgroud)

这样做的主要原因是考虑 元素的访问路径,这样可以使查询更容易.我在这里详细介绍了一些值得你阅读的内容.

它也可以扩展到像你的名字字段这样的东西:

    name: [
        { "lang": "en", "value": "cheese" },
        { "lang": "de", "value: "Käse"  },
        { "lang": "es", "value": "queso" },
        etc...
    ]
Run Code Online (Sandbox Code Playgroud)

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

PS至于你存储Money值的任何东西,我建议你做一些阅读,也可以在这里发帖:

MongoDB - 十进制类型的值怎么样?