【问题标题】:How to return the variant values of each product if that product is a variant?如果该产品是变体,如何返回每个产品的变体值?
【发布时间】:2021-01-05 17:06:30
【问题描述】:

我在 MongoDB 中有一个这样的数据库

{"productId" : 1,
"isVariant": 1,
"variantId" : 1,
"attributeSet" : [ 
        {
            "name" : "Capacity",
            "value" : "500 GB",
            "id" : 3
        }, 
        {
            "name" : "Form Factor",
            "value" : "5 inch",
            "id" : 4
        }, 
        {
            "id" : 5,
            "name" : "Memory Components",
            "value" : "3D NAND"
        }
    ]
},
{"productId" : 2,
"isVariant": 1,
"variantId" : 1,
"attributeSet" : [ 
        {
            "name" : "Capacity",
            "value" : "1 TB",
            "id" : 3
        }, 
        {
            "name" : "Form Factor",
            "value" : "5 inch",
            "id" : 4
        }, 
        {
            "id" : 5,
            "name" : "Memory Components",
            "value" : "3D NAND"
        }
    ]
},
{"productId" : 3,
"isVariant": 1,
"variantId" : 1,
"attributeSet" : [ 
        {
            "name" : "Capacity",
            "value" : "500 GB",
            "id" : 3
        }, 
        {
            "name" : "Form Factor",
            "value" : "2.5 inch",
            "id" : 4
        }, 
        {
            "id" : 5,
            "name" : "Memory Components",
            "value" : "3D NAND"
        }
    ]
},
{"productId" : 4,
"isVariant": 1,
"variantId" : 1,
"attributeSet" : [ 
        {
            "name" : "Capacity",
            "value" : "1 TB",
            "id" : 3
        }, 
        {
            "name" : "Form Factor",
            "value" : "2.5 inch",
            "id" : 4
        }, 
        {
            "id" : 5,
            "name" : "Memory Components",
            "value" : "3D NAND"
        }
    ]
}

现在我想返回 productId 1 和 3 中 500 GB 的数据 响应应该是这样的:

variantValues : [{
attributeValue : "500 GB",
data : [
  {productId : 1},
  {productId : 3}
]},
{
attributeValue : "1 TB",
data : [
  {productId : 2},
  {productId : 4}
]},
{
attributeValue : "2.5 inch",
data : [
  {productId : 3},
  {productId : 4}
]},
{
attributeValue : "5 inch",
data : [
  {productId : 1},
  {productId : 2}
]}]

我将可能的值存储在另一个集合中以获取 variantPossible 值。我存储的值是这样的:

"VariantValues" : {
        "3" : [ 
            "500 GB", 
            "1 TB"
        ],
        "4" : [ 
            "2.5 inch", 
            "5 inch"
        ]
    },

如果该产品是具有上述格式的变体,我想返回每个产品的变体值。谁能帮我解决这个问题。

【问题讨论】:

    标签: javascript node.js mongodb aggregation-framework


    【解决方案1】:

    您应该能够在聚合管道中使用$unwind$group 来实现此目的。这首先将每个属性扁平化为一个文档,然后在您可以按属性值分组的文档中。

    最后,您可以使用$projectattributeValue 获取所需的名称:

    db.collection.aggregate([
      {
        $unwind: "$attributeSet"
      },
      {
        $group: {
          _id: "$attributeSet.value",
          data: {
            "$addToSet": {
              productId: "$productId"
            }
          }
        }
      },
      {
        "$project": {
          _id: 0,
          data: 1,
          attributeValue: "$_id"
        }
      }
    ])
    

    在 mongoplayground 上查看这个简化示例:https://mongoplayground.net/p/VASadZnDedc

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-01-25
      • 2019-04-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-13
      相关资源
      最近更新 更多