Совокупный поиск MongoDB не работает с несколькими параметрами - PullRequest
1 голос
/ 06 августа 2020

Я беру данные из таблицы комментариев, и это работает. Я хочу сделать эквивалент соединения с учетом производительности для коллекции users, чтобы получить подробную информацию о пользователе, который прокомментировал.

Вот мой код, в котором я использую Next js. Я добавил агрегат / поиск, и теперь ничего не получаю.

  const from = req.query.from ? new Date(req.query.from) : new Date();
  const postId = req.query.by;
  const comments = await req.db
    .collection('commentsPosts')
    .find({
      commentedAt: {
        $lte: from,
      },
      ...(postId && { postId }),
    })
    .sort({ commentedAt: -1 })
    .limit(parseInt(req.query.limit, 10) || 10)

    //This part is not working and breaking the whole query
    .aggregate({
      $lookup:{
          from:"users",
          localField:"createdBy",
          foreignField:"_id",
          as:"commenterDetails"
          }
      })
     /////////////
    .toArray();

  res.send({ comments });

Изменить

Обновлено в соответствии с ответом ниже, но все еще нет результатов

   .collection('commentsPosts')
    .aggregate(
      [
       {$match:{
        commentedAt: {
          $lte: from,
        },
        ...(postId && { postId }),
        }
        .sort({ commentedAt: -1 })
        .limit(parseInt(req.query.limit, 10) || 10)
       },
       {$lookup:
          {
                from:"users",
                localField:"createdBy",
                foreignField:"_id",
                as:"commenterDetails"
          }
        }
      ]
    ).toArray();

1 Ответ

4 голосов
/ 06 августа 2020

вам не нужно выполнять find () , если вы планируете использовать aggregate ()

Удалите find () и введите $ match в агрегатный конвейер.

db.comments.aggregate(
  [
   {$match:{commentedAt:{$gt:QUERY_CLAUSE_HERE}},
   {$lookup:{...}}
  ]
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...