Я не могу найти где-нибудь это было задокументировано. По умолчанию операция find () будет получать записи с начала. Как я могу получить последние N записей в mongodb?
Изменить: также я хочу, чтобы возвращаемый результат упорядочивался от менее недавнего к самому последнему, а не наоборот.
Ответы:
Если я понимаю ваш вопрос, вам нужно отсортировать в порядке возрастания.
Предполагая, что у вас есть поле идентификатора или даты с именем "x", вы бы сделали ...
.Сортировать()
1 будет сортировать по возрастанию ( от старого к новому) и -1 будет сортировать по убыванию ( от новых к старому.)
Если вы используете автоматически созданное поле _id, в него встроена дата ... так что вы можете использовать это для упорядочения по ...
Это вернет все ваши документы, отсортированные от самых старых до самых новых.
Естественный порядок
Вы также можете использовать Природный Орден, упомянутый выше ...
Опять же, используя 1 или -1 в зависимости от порядка, который вы хотите.
Используйте .limit ()
И наконец, хорошей практикой является добавление ограничения при выполнении такого широко открытого запроса, чтобы вы могли сделать либо ...
или
источник
item = 3; item.add(3).divide(3) == 2; item.divide(3).add(3) == 4;
Без порядка, каков будет результат ??? Я согласен с вами, что этот обратный порядок не является интуитивным. Это не SQL, в конце концов он должен следовать нормальным парадигмам OO.Последние N добавленных записей, от менее недавних до самых последних, можно увидеть с помощью этого запроса:
Если вы хотите их в обратном порядке:
Если вы устанавливаете Mongo-Hacker, вы также можете использовать:
Если вам надоело постоянно писать эти команды, вы можете создавать собственные функции в вашем ~ / .mongorc.js. Например
затем из оболочки монго просто введите
last(N)
источник
db.collection.find().reverse().limit(1)
выдает ошибку... has no method reverse
Чтобы получить последние N записей, вы можете выполнить следующий запрос:
если вы хотите только одну последнюю запись:
Примечание: вместо $ natural вы можете использовать один из столбцов из вашей коллекции.
источник
вы можете использовать
sort()
,limit()
,skip()
чтобы получить последний N начала записи из любого пропущенного значенияисточник
Вы можете попробовать этот метод:
Получить общее количество записей в коллекции с
Тогда используйте skip:
источник
См. Раздел «Запросы: сортировка и естественный порядок», http://www.mongodb.org/display/DOCS/Sorting+and+Natural+Order, а также sort () в разделе «Методы курсора» http://www.mongodb.org/display. / DOCS / Advanced + Запросы
источник
Вы не можете «пропустить» в зависимости от размера коллекции, потому что она не будет учитывать условия запроса.
Правильное решение состоит в том, чтобы отсортировать от желаемой конечной точки, ограничить размер набора результатов, а затем при необходимости скорректировать порядок результатов.
Вот пример, основанный на реальном коде.
источник
var query = collection.find( { conditions } ).sort({$natural : -1}).reverse().limit(N)
.@ Бен-чен,
Вы можете использовать агрегацию для последних n записей подмножества документов в собрании. Вот упрощенный пример без группировки (в данном случае вы будете делать это между этапами 4 и 5).
Возвращает последние 20 записей (на основе поля с именем timestamp), отсортированные по возрастанию. Затем он проецирует каждый документ _id, timestamp и what_field_you_want_to_show в результаты.
итак, результат будет выглядеть примерно так:
Надеюсь это поможет.
источник
Сортировка, пропуск и т. Д. Могут быть довольно медленными в зависимости от размера вашей коллекции.
Лучшая производительность будет достигнута, если ваша коллекция проиндексирована по некоторым критериям; и тогда вы можете использовать курсор min ():
Во-первых, индексируйте свою коллекцию с помощью
db.collectionName.setIndex( yourIndex )
Вы можете использовать восходящий или нисходящий порядок, что круто, потому что вы всегда хотите, чтобы «N последних элементов» ... так что если вы индексируете в порядке убывания, это то же самое, что получить «первые N элементов» ,Затем вы находите первый элемент вашей коллекции и используете значения его индексного поля в качестве минимальных критериев поиска:
Вот ссылка на курсор min (): https://docs.mongodb.com/manual/reference/method/cursor.min/
источник
db.collectionName.find().hint(yourIndex).limit(N)
Если индекс находится в порядке убывания, вы получите N минимальных значений.Возможно, вы захотите использовать
find
параметры: http://docs.meteor.com/api/collections.html#Mongo-Collection-findисточник
согласно документации mongoDB :
источник
используйте оператор $ slice для ограничения элементов массива
где геолокация - это массив данных, из которого мы получаем последние 5 записей.
источник
Последняя функция должна быть
sort
, а неlimit
.Пример:
источник
sort
послеlimit
?