2016-06-16 1 views
0

Я пытаюсь сделать это с .sort({_id:1}).limit(30), но в результате они отображаются от 0 до 30, но не от 40 до 70 (например), это значит, что я вижу все сообщения до 30 и более поздние, чем 30 - не отображается. Как я могу узнать на самом деле 30 сообщений из db.collection ('messages')?Горячий, чтобы получить последние 30 записей результата сбора в mongodb, но не с нуля?

ответ

2

Вы можете установить первый документ, который будет включен в результаты, вызвав skip() на курсоре:

.sort({_id: 1}).skip(40).limit(30) 

бы обеспечить 41 через 70 документов после сортировки по _id.

Если вы хотите, чтобы получить последний 30, сохраняя их в порядке возрастания, реверсировать сортировки, а затем полностью изменить результаты, используя Array#reverse:

coll.find().sort({_id: -1}).limit(30).toArray((err, docs) => { 
    docs.reverse();  
}); 
+0

но 40 и 70 - это пример. Мне нужно получить от последнего N (может быть 70 или 100, что бы то ни было) дает 30 колод от конца, а не в обратном порядке. Реверсивный порядок работает отлично для меня, но его показ сообщений от самых новых до более старых, а не то, что мне точно нужно – DanialartBiz

+0

@DanialartBiz Затем отмените сортировку с помощью 'sort ({_ id: -1})', а затем отмените возвращаемые документы в своем собственном коде , возможно, используя ['Array # reverse()'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/reverse). – JohnnyHK

+0

Спасибо, его работа, но не легко получить количество записей в коллекции, а затем минус 30, поэтому мы получаем количество курсоров, которые нам нужно пропустить, чтобы получить последние 30 сообщений? – DanialartBiz

Смежные вопросы