Есть ли разница между $ lt / $ gt и $ ne в MongoDB? - PullRequest
1 голос
/ 01 августа 2011

Я только начинаю работать с MongoDB и пытаюсь понять, как работают индексы.У меня есть список предметов в коллекции.У каждого элемента есть версия, которая увеличивается.Затем удаляются все предыдущие версии (меньше текущей) (запись не обновляется, поэтому обе версии доступны некоторое время).Существует составной индекс по номеру изделия и версии.Что касается удаления, имеет ли значение (с точки зрения производительности), используете ли вы $ ne по сравнению с $ lt?

Я бы предположил, что нет, но я просто хочу подтвердить.

Ответы [ 2 ]

4 голосов
/ 01 августа 2011

Не зная подробностей реализации $lt может быть более эффективным, чем $ne.Для индекса B-дерева $ne будет два сканирования диапазона ($lt и $gt), тогда как $lt - это всего лишь один.

Но в вашем случае $lt кажется тем, что выв любом случае хочу (чтобы найти более старые версии).Если вы используете $ne, вы можете также случайно удалить более новые версии, которые, как вы предполагаете, не существуют, но, возможно, фактически были созданы за это время.Помните, что MongoDB не поддерживает транзакции или согласованные представления документов.Одновременные обновления могут укусить вас здесь.

1 голос
/ 07 августа 2014

На самом деле, есть огромная разница. «Операторы $ ne и $ nin не являются выборочными» , что означает, что индекс вообще не будет ускорять эту часть запроса. Поэтому, если вы используете $ ne, то часть версии составного индекса не будет использоваться MongoDB.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...