2015-04-07 2 views
2

Вот конкретная причина для этого вопроса:WiredTiger MongoDB engine ordering: Является ли «естественный порядок» эквивалентным «заказу» с двигателем WiredTiger в mongodb?

db.collection.findOne() функция описана как:

"Если несколько документов удовлетворить запрос, этот метод возвращает первый документ, в соответствии с натуральный заказ, который отражает порядок документов на диске ".

В соответствии с http://docs.mongodb.org/manual/reference/method/cursor.sort/#mmapv1 это понятие естественного порядка похоже только на MMAPv1 и не распространяется на проводной Tiger.

Затем я хотел бы знать, будет ли использоваться db.collection.findOne() с wiredTiger всегда возвращать первый проиндексированный документ (тот, который имеет самый низкий индекс _id), который соответствует критериям поиска.

-> Тогда findOne() будет эквивалентен «findFirst() согласно _id», и заказ будет гарантирован: это правильно?

Спасибо,

Julien

ответ

0

Вместо того, чтобы беспокоиться о том, что определяет естественный порядок, я бы подумал об этом как «независимо от того, что база данных хочет сделать в этот момент». Вы никогда не должны зависеть от естественного порядка, поскольку у вас практически нет гарантий того, как он будет возвращать документы, особенно если вы сравниваете механизмы хранения. Это не порядок, основанный на времени ввода, хотя это может быть; это не порядок, основанный на местоположении на диске, хотя это может быть; и это не заказ, основанный на _id, хотя это может быть. Он просто возвращает документы, однако разработчики выбирают лучше или проще на основе того, что не требуется какой-либо конкретный заказ, поэтому его называют «естественным». Поскольку это детализация реализации, она может измениться в любой момент.

Я хотел бы знать, если с помощью db.collection.findOne() с wiredTiger всегда будет возвращать первый индексный документ (один с самым низким индексом _ID), который соответствует критериям поиска

Нет Если вы хотите наименьший _id, явным образом заказывайте по возрастанию _id и принимайте первый результат. У вас всегда есть индекс _id.

+0

этот ответ мой вопрос, поскольку я понимаю, что я не буду в состоянии полагаться на естественный порядок. благодаря –

0

Природные средства в порядке вставки, а не по порядку ид. The doc не говорит, что это не работает для WiredTiger, поэтому я предполагаю, что он работает для этого двигателя хранения, а также:

Используйте естественный оператор $, чтобы использовать естественный порядок для результатов операции сортировки. Естественный порядок относится к логическому упорядочению документов внутри базы данных.

+0

из документа естественные средства: порядок, в котором база данных ссылается на документы на диске –

+0

Извините, формулировка плоха или неясна, но, похоже, не отвечает на мой вопрос. Из документа естественное означает: «Порядок, в котором база данных относится к документам на диске ", который от того, что я понимаю, отличается от порядка вставки. в MMAPv1, из-за файлов с отображением памяти и потенциального перераспределения документов, порядок вставки не будет сохранен.Кроме того, я-эмпирически мысленный порядок _id был связан с порядком вставки enven, хотя я должен признать, что не знаю, повторяет ли Mongo идентификатор удаленных документов) –

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