MykolaPetiukh
@MykolaPetiukh
Директор кафе

Как сделать слияние массивов при группировке?

Допустим есть такая коллекция:
[{
    "_id":"1",
    "tag":"tag",
    "strings":[
        "a","b","c","d"
    ]
},
{
    "_id":"2",
    "tag":"tag",
    "strings":[
        "e","f"
    ]
}]


Как сделать группировку по полю tag, чтобы произошло слияние массивов strings? Результат такой нужен:
[
    {
        "_id":"tag",
        "strings":["a","b","c","d","e","f"]
    }
]


Если делать $push, то выходит двумерный массив:
[
    {
        "_id":"tag",
        "strings":[
            ["a","b","c","d"],
            ["e","f"]
        ]
    }
]
  • Вопрос задан
  • 7 просмотров
Решения вопроса 1
MykolaPetiukh
@MykolaPetiukh Автор вопроса
Директор кафе
Получилось это сделать с помощью $addFields и $reduce:
db.collection.aggregate([
  {
    "$group": {
      "_id": "$tag",
      "stringsArray": {
        "$push": "$strings"
      }
    }
  },
  {
    "$addFields": {
      "strings": {
        "$reduce": {
          "input": "$stringsArray",
          "initialValue": [],
          "in": {
            "$setUnion": [
              "$$value",
              "$$this"
            ]
          }
        }
      }
    }
  }
])
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
07 мар. 2021, в 15:48
300000 руб./за проект
07 мар. 2021, в 15:26
7000 руб./за проект
07 мар. 2021, в 15:07
20000 руб./за проект