MongoDB: Как сгруппировать / транспонировать по значениям массива - PullRequest
1 голос
/ 22 апреля 2020

У меня есть очень простая коллекция с такими документами:

{
  _id: 42,
  array: ["foo", "bar", "baz"]
}

Я ищу запрос (агрегацию), который может группировать по значениям массива и производить это:

[
  {
    _id: "foo",
    matchingDocs: [
      {
        _id: 42,
        array: ["foo", "bar", "baz"]
      },
      { ... }
    ]
  }
]

1 Ответ

1 голос
/ 22 апреля 2020

Вам нужно $ unwind и $ group , где $$ROOT рекомендует весь документ, который обрабатывается в данный момент. Прежде чем сделать это, вам нужно добавить еще один массив, чтобы вы получили исходный раскрученный массив в конечном результате:

db.collection.aggregate([
    {
        $addFields: { arr: "$array" }
    },
    {
        $unwind: "$arr"
    },
    {
        $group: {
            _id: "$arr",
            matchingDocs: { $push: "$$ROOT" }
        }
    },
    {
        $project: {
            "matchingDocs.arr": 0
        }
    }
])

Пн go Детская площадка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...