Держите не связанный объект в агрегации mongodb - PullRequest
0 голосов
/ 05 декабря 2018

Я пытаюсь создать агрегацию для коллекции users, а затем создать $lookup для другой коллекции usersurveystatuses, чтобы определить, выполнил ли этот пользователь опросы.Это хорошо работает, но проецирует только пользователей, которые имеют соответствующие опросы.Как я могу сохранить всех пользователей, даже если опрос не имеет отношения.Код:

db.collection('users')
      .aggregate([
        {
          $match: { roles: { $in: ['user'] } },
        },
        {
          $lookup: {
            from: 'usersurveystatuses',
            localField: '_id',
            foreignField: 'user_id',
            as: 'completedSurveys',
          },
        },
        {
          $unwind: {
            path: '$completedSurveys',
          },
        },
        {
          $match: {
            'completedSurveys.status': 'completed',
          },
        },
        {
          $group: {
            _id: '$_id',
            name: { $first: '$firstname' },
            surname: { $first: '$lastname' },
            credits: { $first: '$credits' },
            completedSurveys: { $push: '$completedSurveys' },
          },
        },
        {
          $project: {
            _id: 1,
            name: 1,
            surname: 1,
            credits: 1,
            completedSurveys: 1,
          },
        },
      ])
      .toArray()
      .then(users => {
        console.log(users)
      })

В результате возвращается только пользователь, который завершил опросы.

[ { _id: 5be98fa0b02eed1b2a17ca54,
    name: 'User',
    surname: 'User',
    credits: 0,
    completedSurveys: [ [Object], [Object] ] } ]
...