Выражение последовательности в OR запросе MongoDB

прочитав документацию OR запросов MongoDB, синтаксис OR:

Syntax: { $or: [ {  }, {  }, ... , {  } ] } 

То, что я не понял, - это последовательность, в которой выполняется выражение theses. т.е.

получить документы, соответствующие выражению-1, если ничего не найдено, получить документы, соответствующие выражению-2 ect ... Верно ли, что выражение выполняет одно за другим или?

и что это значит: " При использовании индексов с $ или запросами помните, что каждое предложение $ или запроса будет выполняться параллельно. "

0
nl ja de

1 ответы

Нет конкретного порядка выполнения запросов, будь то:

db.col.find({ name: 's', c: 1 });

Или:

db.col.find({$Или: [{name: 's'}, {c: 1}]})

В $ или MongoDB будет эффективно выполнять x запросов на основе количества условий, которые у вас есть в вашем коде $ или , возвращать результат для каждого предложения, объединять дубликаты, а затем возвращать результат (просто положил). Из-за этого поведения MongoDB может фактически использовать несколько индексов для предложения $ или , а на минуту - только предложение $ или .

Это важно отметить при создании сложных индексов. Индексы требуют определенной структуры для запроса, иногда для работы в оптимальном темпе. Таким образом, если у вас есть составной индекс:

{name: 1, c: 1}

Он может не соответствовать обоим статьям:

 db.col.find({$Или: [{name: 's'}, {c: 1}]})

В исполнении. Поэтому здесь вы должны иметь в виду параллелизм предложений $ или . Если вы хотите проверить, что все предложения используют индексы, вы можете использовать explain() в конце, который разбивает предложения и их использование для вас.

1
добавлено
@Adio К сожалению, не с MongoDB он просто запускает все предложения параллельно, а затем возвращает результаты, у него нет оператора CASE
добавлено автор Sammaye, источник
@Adio Как вы это понимаете? Должно быть хорошо, чтобы все предложения выполнялись параллельно, и вы не должны (до тех пор, пока вы тщательно выбираете свой запрос и индексы и т. Д.), Смотрите слишком много проблем с производительностью, используя $ или
добавлено автор Sammaye, источник
Есть ли способ сообщить MongoDB: «Вернуть первый документ, найденный в первом предложении, и только если ни один документ не найден из первого условия, используйте второй» и т. Д.?
добавлено автор Adelin, источник
так что я должен делать это на производстве?
добавлено автор Adelin, источник
pro.jvm
pro.jvm
3 503 участник(ов)

Сообщество разработчиков Java Scala Kotlin Groovy Clojure Чат для нач-их: @javastart Наш сайт: projvm.com projvm.ru Наш канал: @proJVM Вакансии: @jvmjobs Конфы: @jvmconf

Java & Co
Java & Co
2 370 участник(ов)

Можно обсуждать с матом и без всё, что касается жабы, вплоть до холиваров. НЕ ИМЕЕТ ОТНОШЕНИЯ К САЙТУ JAVARUSH.RU ПРАВИЛА - https://t.me/javarush/75723 Вакансии сюда - https://telegram.me/joinchat/B7IzvUCnfo6d8t3yIxKguQ По вопросам - @thedude

learn.java
learn.java
1 888 участник(ов)

Чат для начинающих и не только Статистика: https://combot.org/chat/-1001083535868 Основной чат - @jvmchat

DBA - русскоговорящее сообщество
DBA - русскоговорящее сообщество
1 345 участник(ов)

Общаемся и обсуждаем темы, посвященные DBA, PostgreSQL, Redis, MongoDB, MySQL, neo4j, riak и т.д. См. также: @devops_ru, @kubernetes_ru, @docker_ru, @nodejs_ru Рекомендуем сразу отключить уведомления, чтобы пребывание здесь было полезным и комфортным.

MongoDB Russian
MongoDB Russian
1 086 участник(ов)

> db.stats() https://combot.org/chat/-1001035023078

Java Underground
Java Underground
169 участник(ов)

https://vk.com/javatutorial

Javanese Questions
Javanese Questions
109 участник(ов)

Чат предназначен для обмена знаниями строго в формате в вопрос-ответ. Тема — Java, Kotlin и Android. Вопрос должен быть предварительно прогуглен, понятно и грамотно сформулирован, помечен хэштегами. Ответ — тем более. Куски кода размером в несколько строк можно писать прямо здесь, для больших кусков кода стоит использовать http://gist.github.com/, http://pastebin.com/, https://codeshare.io/ или любой аналогичный сервис. В некоторых случаях можно прикреплять скриншоты. Стикеры и гифки запрещены. Дополнять и уточнять вопросы и ответы — редактированием исходного сообщения. Обсуждения должны приводить к редактированию вопроса/ответа и удаляться. По хештегам можно искать существующие вопросы и овтеты: #вопрос #ответ #git #generics #java #server #awt #javafx #swing #kotlin #anko #tornadofx #ktor #android #recyclerView #performance #arch #network #permissions #storage #async