Как получить данные между двумя индексами - PullRequest
0 голосов
/ 12 июля 2020

Имейте код, в котором пользователи ранжируются по рейтингу.

const rankings = await Rating.aggregate([{"$group": {_id:"$receiver", value: {$sum: "$rate"}}}]).sort({reputation: "desc"});

Результат выглядит примерно так

[
  { _id: 'bob', value: 3 },
  { _id: 'joe', value: 2 },
  { _id: 'billy', value: 2 },
  { _id: 'joseph', value: 2 },
  { _id: 'kim', value: 1 },
  { _id: 'jane', value: 0 }, ....
]

Однако, поскольку это длинный список> 100, я пытаюсь создать страницу, на которой будет отображаться только 10 пользователей. Как мне выполнить sh это?

Я знаю, что могу использовать slice (index1, index2), но если я использую slice (), я боюсь, что время выполнения будет медленным, так как его получение каждый раз сначала данные из базы данных, а затем их разрезание.

Это то, о чем я должен беспокоиться? Если да, есть ли способ просто получить данные между индексом-1 и индексом-2 прямо из базы данных?

Спасибо

1 Ответ

2 голосов
/ 12 июля 2020

Я думаю, вам нужно использовать $skip & $limit как часть конвейера агрегации.

В качестве примера следующий код будет -

  • соответствует всем записи, удовлетворяющие условиям, указанным в filterMatchQuery объект

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

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

     await Rating.aggregate([
         { $match: filterMatchQuery }
         { $skip: skip },
         { $limit: limit }
     ]);
    

Надеюсь, это поможет.

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