Как отсортировать, прежде чем пропустить и ограничить в мангусте? - PullRequest
0 голосов
/ 03 января 2019
const list = async function({
  end_cursor = 0
} = {}) {
  return await db.collection.find().sort({ _id: -1 }).skip(end_cursor).limit(50);
}

Выше приведен код, который, как я думал, должен работать, но я обнаружил, что это не так. Вот очевидное:

  let list1 = await list(0);
  list1 = list1.reduce((o, a)=>{
    let {
      _id
    } = a;
    o[_id] = true;
    return o;
  }, {});

  let list2 = await list(50);
  for (let i of list2) {
    let {
      _id
    } = i;
    if (list1[_id]) {
      console.log('repeated');
      break;
    }
  }

Если db.collection.find().sort({ _id: -1 }).skip(end_cursor).limit(50) работает, list1 и list2 должны иметь уникальные _id s, но они этого не делают, вместо этого консоль выводит repeat.

1 Ответ

0 голосов
/ 04 января 2019

Вы можете использовать агрегацию по вашему требованию.

db.collection.aggregate([
  {$sort: {_id: -1}},
  {$skip: end_cursor}, //value should be a positive integer
  {$limit: 50}
]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...