Агрегируйте строковые значения в массив уникальных строковых значений для поля с mon go или mon goose и node.js - PullRequest
0 голосов
/ 27 февраля 2020

Мне нужно объединить "lastNames" и "профессия" для "имени", чтобы получить результат:

{
  name: 'John',
  occupations: ['software engineer', 'qa']
  lastNames: ['Smith', 'Red', 'Doe']
}

ввод

name: 'John'

документов, представленных в пн go :

{name: 'John', lastName: 'Smith', occupation: 'software engineer'}
{name: 'Steve', lastName: 'Smith', occupation: 'senior software engineer'}
{name: 'John', lastName: 'Doe', occupation: 'qa'}
{name: 'Steve', lastName: 'Doe', occupation: 'manager'}
{name: 'John', lastName: 'Red', occupation: 'software engineer'}

Я начал с этого запроса агрегации:

Employees.aggregate([
  { $match: { name: name } },
  {
    $unwind: {
      path: '$lastName',
    },
  },
  {
    $unwind: {
      path: '$occupation',
    },
  },
  { $group: { _id: '$name' } },
]);

, но он возвращает пустой массив, так что я застрял, как никогда ранее не агрегировал.

Есть ли способ получить этот требуемый результат?

1 Ответ

0 голосов
/ 27 февраля 2020

Будет ли это:

db.collection.aggregate([
   { $match: { name: "John" } },
   {
      $group: {
         _id: "$name",
         occupations: { $addToSet: "$occupation" },
         lastNames: { $addToSet: "$lastName" },
      }
   },
   {
      $project: {
         _id: 0,
         name: "$_id",
         occupations: 1,
         lastNames: 2
      }
   }
])

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

...