Монго фильтр агрегации $ проект массив с другим массивом - PullRequest
1 голос
/ 04 мая 2019

Фильтрация массива $ project по другому файлу в другом массиве. Это то, что у меня есть сейчас. Я попытался с фильтром в другом проекте $, но он возвращает пустой массив. Я также попытался сопоставить массив встреч с массивом идентификаторов и $filter пользователей с $in: [ 'user._id', appointmentsIds ]

{
      $match: {
        provider_id: providerId,
      },
    },
    {
      $lookup: {
        from: 'appointments',
        localField: 'provider_id',
        foreignField: 'provider_id',
        as: 'appointments',
      },
    },
    {
      $project: {
        _id: 1,
        rate: 1,
        provider_id: 1,
        appointments: {
          $filter: {
            input: '$appointments',
            as: 'appointment',
            cond: {
              $in: ['$$appointment.date', dates],
            },
          },
        },
      },
    },
    {
      $lookup: {
        from: 'fingerprints',
        let: { id: '$_id' },
        pipeline: [
          {
            $match: {
              $expr: {
                $in: ['$$id', '$visits.bussines_id'],
              },
            },
          },
        ],
        as: 'users',
      },
    },
    {
      $project: {
        _id: 1,
        rate: 1,
        appointments: 1,
        users: {
          $filter: {
            input: '$users',
            as: 'user',
            cond: {
              $ne: ['$$user.user_id', { $toObjectId: '$provider_id' }],
            },
          },
        },
      },
    },
    {
      $addFields: {
        viewers: {
          $map: {
            input: '$users',
            as: 'user',
            in: {
              visits: {
                $filter: {
                  input: '$$user.visits',
                  as: 'visit',
                  cond: {
                    $in: ['$$visit.date', dates],
                  },
                },
              },
            },
          },
        },
      },
    },
    {
      $project: {
        _id: 0,
        rate: 1,
        viewers: { $size: '$viewers' },
        appointmentsCount: { $size: '$appointments' },
        users: 1,
        appointments: 1,
      },
    },

Я хочу сохранить все поля, которые находятся в последнем $project, и добавить другое поле с массивом users, отфильтрованным по user_id, который находится в appointments массиве.

...