Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB中的多语言属性_Mongodb_Schema_Multilingual - Fatal编程技术网

MongoDB中的多语言属性

MongoDB中的多语言属性,mongodb,schema,multilingual,Mongodb,Schema,Multilingual,我试图在MongoDB中设计一个模式范例,它支持文档中变量属性的多语言值 例如,我会有一个产品目录,其中每个产品可能需要以各种语言存储其名称、标题或任何其他属性。 对于其他特定于语言环境的属性,例如价格/货币变化,也应该采用相同的范例 我一直在考虑一种键值方法,其中键是语言代码,值是相应的值: { sku: "1011", name: { "en": "cheese", "de": "Käse", "es": "queso", etc... }, pric

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

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

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

 { 
      sku: "1011",
      name: { "en": "cheese", "de": "Käse", "es": "queso", etc... },
      price: { "usd": 30.95, "eur": 20, "aud": 40, etc... }
 } 
问题是,我相信这会使我无法在多语言字段上使用索引。 最后,我想要一个通用的、直观的、可索引的设计


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

关于您的架构设计的全面建议可能有点宽泛,这里讨论的主题是。不过,我建议您考虑将显示的元素放入一个子文档数组中,而不是将每个字段的字段与单子文档关联。
{ 
    sku: "1011",
    name: [{ "en": "cheese" }, {"de": "Käse"}, {"es": "queso"}, etc... ],
    price: [{ "usd": 30.95 }, { "eur": 20 }, { "aud": 40 }, etc... ]
} 
这样做的主要原因是考虑对元素的访问路径,这将使查询更容易。这篇文章我讲了一些细节,可能值得你阅读

这也可能是一种扩展的可能性,例如您的姓名字段:

    name: [
        { "lang": "en", "value": "cheese" },
        { "lang": "de", "value: "Käse"  },
        { "lang": "es", "value": "queso" },
        etc...
    ]
所有这些都取决于您的索引和访问要求。这完全取决于您的应用程序到底需要什么,MongoDB的美妙之处在于它允许您根据自己的需要构建文档

p.S.至于你在哪里储存金钱价值观,我建议你读一些书,也许从这里的这篇文章开始:


关于这个话题,你的最终选择是什么@ChenR@calfzhou哇,从那时起已经很久了:)@calfzhou,在这个问题之后不久,某个项目突然中断,在另一个(流星)项目中,我使用了这个模式:```{sku:“1011”,名称:“奶酪”,颜色:“黄色”,i18n:{de:{name:“Käse”,颜色:“Gelb”}“`` Meteor中的这个模式允许我通过引用顶级‘i18n’对象,并将顶级属性替换为i18n对象内部的属性(如果可用),例如DE模式下的product.name/==“Käse”,从而仅公开所需的语言。不管怎样,我仍然认为最初发布的模式是goodThank@ChenR!我使用Ruby和mongoid作为我的MongoDB驱动程序,刚刚发现mongoid支持非常简单的语句:
field:description,localize:true
,它在内部
将字段存储为区域设置/值对的散列,可能与您的方式类似。