如何通过使用猫鼬nodejs中聚合中的相同嵌套对象值对数组对象进行分组

时间:2019-09-24 08:45:01

标签: node.js mongodb mongoose aggregation-framework

我需要基于猫鼬聚合$ project中相同键值,使用给定的数组对象将所有数组对象和嵌套对象分组。

需要对所有具有相同键值的标题进行分组,还需要根据适当的密钥对嵌套对象进行分组。关键值可能是动态值,例如“颜色,大小,重量,高度,内存,存储空间等”。

{ $group: { 
 _id: null, 
 "dynamicFilter": { "$push": '$product' },
 }},
$project: { _id: 0,
    autoFilter: {
            $filter: {
                input: '$dynamicFilter',
                as: 'filterData',
                cond: {

                }
            }
        }
    }}

注意

“ $ dynamicFilter”具有一些数组对象字符串,该字符串对象是从集合中获取的

我的猫鼬收藏的样本记录(产品字段数组值在此处存储为字符串)

_id:ObjectId("5d2f8835d5027d4a5f9b535a") 
product:"[{"title":"COLOR","attribute":[{"label":"Red","isDefaul..."}{"label":"black","isDefaul..."}]}]"

_id:ObjectId("5d2f8835d5027d4a5sdf7654") 
product:"[{"title":"RAM","attribute":[{"label":"8GB","isDefaul..."}]}]"

期望结果

“标题”键值可以是动态的,例如“颜色,大小,重量,高度,内存,存储空间等。”

{
  "autoFilter": [
    {
      "title": "Color",
      "attribute": [
        {
          "label": "Gold"
        },
        {
          "label": "rose"
        },
        {
          "label": "black"
        },
        {
          "label": "blue"
        }
      ]
    },
    {
      "title": "RAM",
      "attribute": [
        {
          "label": "4GB"
        },
        {
          "label": "3GB"
        },
        {
          "label": "8GB"
        }
      ]
    },
    {
      "title": "Stroage",
      "attribute": [
        {
          "label": "32GB"
        },
        {
          "label": "64GB"
        }
      ]
    },
    {
      "title": "size",
      "attribute": [
        {
          "label": "5inch"
        },
        {
          "label": "6inch"
        }
      ]
    }
  ]
}

0 个答案:

没有答案