агрегат mongodb $ соответствует l oop с предыдущими данными - PullRequest
0 голосов
/ 25 января 2020
Order.aggregate()
      .match({ createdAt: dateRange })
      .lookup({
        as: 'userData',
        foreignField: '_id',
        from: 'users',
        localField: 'user',
      })
      .unwind('$userData')
      .lookup({
        as: 'referrals',
        foreignField: 'referredBy',
        from: 'users',
        localField: 'user',
      })
      .unwind('$referrals')
      .project({
        _id: 0,
        companyName: '$userData.companyName',
        fullName: '$userData.fullName',
        invoiceNumber: 1,
        orderNumber: 1,
        price: 1,
        referrals: '$referrals._id',
        user: 1,
      })
      .group({
        _id: '$user',
        companyName: { $first: '$companyName' },
        fullName: { $first: '$fullName' },
        invoiceNumber: { $first: '$orderNumber' },
        referrals: { $addToSet: '$referrals' },
        total: { $sum: '$price' },
      })
      .match({
        $or: '$referrals'.map(user => ({ user })),
        createdAt: dateRange,
      });

Все, что мне нужно, это l oop через массив $ referrals. Но появляется сообщение об ошибке:

"$ referrals" .map не является функцией

Есть ли обходной путь для этого?

Также я я новичок в MongoDB, это лучший способ получения данных? Данные, которые я хочу:

Предполагая, что пользователь mr.foo :

  • найти все заказы в диапазоне дат, подсчитать сумму, сделать номер первого заказа номер счета,

  • получить mr.foo данные из коллекции пользователей,

  • найти всех пользователей кто mr.foo реферал - (у кого есть mr.foo id в поле referredBy)

  • найти все заказы рефералов, и посчитайте общий счет рефералов

  • рассчитайте комиссию mr.foo от общего счета их рефералов.

OUTPUT.

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