как сгруппировать объекты массива, используя одно и то же значение вложенных объектов внутри агрегата в mongoose nodejs - PullRequest
1 голос
/ 24 сентября 2019

Мне нужно сгруппировать все объекты массива и вложенные объекты, используя заданные объекты массива на основе одного и того же значения ключа внутри $ project в агрегате mongoose.

Необходимо сгруппировать все заголовки, которые имеют одинаковое значение ключа, а также нуждаются вгруппировать вложенные объекты по соответствующим ключам.Значение ключа может быть динамическим, таким как «цвет, размер, вес, рост, оперативная память, хранилище и т. Д.».

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

                }
            }
        }
    }}

Примечание

«$ dynamicFilter» содержит некоторую строку объекта массивакакой получен из коллекции

Пример записи моей коллекции mongoose (значение массива поля продукта хранится здесь как строка)

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

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

Ожидаемый результат

Значение ключа "title"может быть динамическим, как «цвет, размер, вес, рост, баран, хранение и т. д.»

{
  "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"
        }
      ]
    }
  ]
}
...