Монго Агрегация группировки и сопоставления массивов объектов - PullRequest
0 голосов
/ 09 мая 2018

Мне нужно сгруппировать коллекцию монго и объединить.

Пример коллекции

[{id: "1", навык: "готовка"}, {id: "1", навык: "рыбалка"}]

Поиск коллекции

[{имя: "готовка", значение: 3}, {имя: "рыбалка", значение: 2}]

Желаемый результат

[{id: "1", навыки: [{value: 3, "готовка"}, {value: 2, "рыбалка"}]}]

Вот как далеко я.

db.talent.aggregate([
    { 
        $group: '$id' 
        skills: { $addToSet: '$skill' }
    },
])

Результат:

[{id: "1", навыки: ["готовка", "рыбалка"]}]

Мне интересно, возможно ли это вообще?

Я скучаю по SQL, нужна помощь!

1 Ответ

0 голосов
/ 10 мая 2018

Мы можем сделать это, используя $ lookup , $ group и $ project в агрегации конвейер

Ниже показан запрос оболочки mongodb

db.example_collection.aggregate([
  {
    $lookup: {
      from: "lookup_collection",
      localField: "skill",
      foreignField: "name",
      as: "skills"
    }
  },
  {
    $group: {
      _id: "$id",
      skills: {
        $push: "$skills"
      }
    }
  },
  {
    $project: {
      "id": "$_id",
      "skills.name": 1,
      "skills.value": 1,
      "_id": 0
    }
  }
])
...