对于电子商务平台,我们正在寻找产品索引。默认字段很简单,例如:name_enname_dename_frdescription。但是,价格和库存取决于另一个值:

  • Product A(对于webshop 1)具有price = 1.99stock = 10,并且适合类别1、10和50。
  • Product A(对于webshop 2)具有price = 5.99stock = 5以及类别9、90和500。

  • 我当时在想嵌套对象,但这是一种选择吗?
    - name_en: Product A
    - description_en: Product A description
    - webshops: [{
        - key: webshop_id
          value: 1
        - key: price
          value: 1.99
        - key: stock
          value: 10
        - key: categories
          value: [1, 10, 50]
        },{
        - key: webshop_id
          value: 2
        - key: price
          value: 5.99
        - key: stock
          value: 5
        - key: categories
          value: [9, 90, 500]
        }
    ]
    

    这样容易查询吗?我们可以轻松获取带有webshop.key.webshop_id.value = 1webshop.key.categories.value = 500值的整个文档吗?

    我的想法是否正确,是否有正确的方向指示?

    最佳答案

    您可以像以前一样嵌套,但是在单个网上商店中很难更新产品的价格或库存,因为您必须重新索引整个webshops数组。有多种解决方法,但这令人费解。

    除了具有嵌套结构之外,您还可以对Webshop零件进行非规范化,只需在这样的文档中包括pricestockcategories字段即可。

    Document 1:
    - name_en: Product A
    - description_en: Product A description
    - webshop_id: 1
    - price: 1.99
    - stock: 10
    - categories: [1, 10, 50]
    
    Document 2:
    - name_en: Product A
    - description_en: Product A description
    - webshop_id: 2
    - price: 5.99
    - stock: 5
    - categories: [9, 90, 500]
    

    然后,在查询中,您可以简单地添加webshop = 1webshop = 2(或两者)的约束,具体取决于您要查询的网上商店。更新特定商店中产品的价格,库存和类别也更加容易,您所要做的就是更新相应的文档。

    这意味着您的产品数据(名称,说明等)将在每个网上商店中复制一次,但通常没什么大不了的(在NoSQL世界中很常见),您只需要更新2个文档即可,而不是更新单个文档,但是_bulk将帮助那里。至少,当您添加新的网上商店时,您不需要重新索引所有数据(!!!),并且您可以更改价格,在一个网上商店中的库存而不会干扰其他网上商店。

    07-26 06:47