Mongodb найти возвращаемый документ заказа
4009 просмотра
1 ответ
У меня есть коллекция с полем с именем «дата» (также проиндексирован). Содержит значения ггггммдд (пример: 20140731, 20140730, 20140729 ...)
Документы хранятся в порядке убывания на основе даты. Таким образом, коллекция имеет 20140731 как первый документ.
Когда я использую команду find с фильтрами {$ gte: 20140720, $ lte: 20140731}, mongodb возвращает запрос в порядке возрастания поля «дата».
Я знаю, что могу использовать сортировку, но как мне заставить mongodb возвращать результаты в зависимости от порядка их создания?
Спасибо!
Автор: hello mtyj Источник Размещён: 13.11.2019 11:34Ответы (1)
8 плюса
Документы хранятся в естественном порядке
Документы хранятся в порядке убывания на основе даты. Таким образом, коллекция имеет 20140731 как первый документ.
Если вы не используете ограниченную коллекцию , нет гарантии для заказа документов на диске (также называемый естественным порядком ).
При удалении и перемещении документа (когда документ выходит за пределы выделенного ему пространства записи), в свободном списке создается пространство, которое будет использоваться повторно.
Вот быстрый пример, который должен продемонстрировать это в mongo
оболочке:
// Start with an empty database & collection
use demodb; db.dropDatabase(); db.order.drop()
// Add some test data
for (i=0; i<1000; i++) {
db.order.insert({'i': i})
}
// Looks like insertion order! (0..9)
db.order.find({}).limit(10);
// Pause 5s for effect :)
sleep(5000);
// Remove half the entries
db.order.remove({ i: { $lt: 500 }})
// Re-add the missing entries
for (i=0; i<500; i++) {
db.order.insert({'i': i})
}
// Not the entries you expected .. space from deleted records was reused
db.order.find({}).limit(10)
// Clean up demodb
db.dropDatabase()
Порядок результатов
Когда я использую команду find с фильтрами {$ gte: 20140720, $ lte: 20140731}, mongodb возвращает запрос в порядке возрастания поля «дата».
Если для запроса используется индекс, документы возвращаются в порядке их нахождения в индексе. Вы должны воспользоваться этим при построении индексов для общих запросов (см. Использование индексов для сортировки результатов запросов ).
К вашему сведению, простой индекс (например, on {date:1}
) может использоваться для возврата результатов, отсортированных в порядке возрастания или убывания.
Сортировать по ObjectID
Если вы используете ObjectID по умолчанию для MongoDB _id
, вы можете отсортировать их { _id: 1 }
по приблизительному порядку вставки, поскольку первые 4 байта ObjectID содержат временную метку. Если вы хотите использовать это для сортировки запроса на основе date
приблизительного порядка вставки, вы должны обеспечить индекс {date:1, _id:1}
.
Обратите внимание, что ObjectID, как правило, генерируются драйвером клиента, поэтому, если у вас есть смещение часов на серверах приложений (или они _id
создаются за некоторое время до вставки документа), ObjectID могут не полностью отражать «порядок вставки», как это видно на сервере. Если точность порядка вставки очень важна, как правило, можно сгенерировать ее _id
на стороне сервера (подход зависит от драйвера).
Вопросы из категории :
- mongodb Обновление вложенных документов в mongodb
- mongodb Когда использовать MongoDB или другие системы, ориентированные на документы?
- mongodb MongoDB: Как обновить несколько документов с помощью одной команды?
- mongodb MongoDB: Можно ли сделать запрос без учета регистра?
- mongodb Может ли MongoDB находиться в процессе?
- mongodb Получить имена всех ключей в коллекции
- mongodb SQLite-подобная альтернатива для MongoDB?
- mongodb Как выполнить эквивалент SQL Join в MongoDB?
- mongodb Как установить MongoDB на Windows?
- mongodb Как запустить MongoDB в качестве службы Windows?
- mongodb Транзакции MongoDB?
- mongodb mongodb: insert if not exists
- mongodb MongoDB Regex Поиск по целочисленному значению
- mongodb Найти объекты между двумя датами MongoDB
- mongodb Как запросить MongoDB с «лайк»?
- mongodb Визуальное управление документами и коллекциями MongoDB
- mongodb Выполнение регулярных выражений запросов с pymongo
- mongodb Как распечатать более 20 предметов (документов) в оболочке MongoDB?
- mongodb MongoDB: обновление документов с использованием данных из того же документа
- mongodb В MongoDB как вы используете $ set для обновления вложенного значения / встроенного документа?