簡體   English   中英

如果該產品是變體,如何返回每個產品的變體值?

[英]How to return the variant values of each product if that product is a variant?

我在 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"
        ]
    },

如果該產品是具有上述格式的變體,我想返回每個產品的變體值。 誰能幫我這個。

您應該能夠在聚合管道中使用$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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM