MongoDB - несколько операций или $ - PullRequest
56 голосов
/ 01 марта 2011

Как бы у меня было несколько $ или операций? До сих пор я пробовал следующее, но он молча игнорирует 2 $ или.

{
  $or: [{a: 2}, {a: 3}], 
  $or: [{b: 5}, {b: 4}]
}

Полагаю, это потому, что я использую два одинаковых ключа. Есть ли способ обойти это?

Ответы [ 4 ]

93 голосов
/ 15 ноября 2011

В Mongo 2.0 добавлен оператор $ and, поэтому вы можете выполнить запрос следующим образом:

db.things.find({$and: [{$or : [{'a':1},{'b':2}]},{$or : [{'a':2},{'b':3}]}] })

http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24and

0 голосов
/ 11 января 2017

Для множественных подобных в sql мы используем $ in, а для не мы используем $ nin vc - это название нашей коллекции здесь. Мы находим, что эта строка содержит процессор или памятку.

db.collection('vc').find({   "name" :   { $in: [ /cpu/, /memo/ ]   }     }
0 голосов
/ 26 июля 2013

$ и не будет выполнять эту работу, поскольку 2-й $ или не будет проверяться, если первый не пройден

со страницы руководства Mongo:

Оператор $ and использует оценку короткого замыкания. Если первое выражение (например,) оценивается как ложное, MongoDB не будет оценивать оставшиеся выражения.

Вложенный $ или как следует сделать трюк:

db.things.find ({$ or: [{$ or: [{'a': 1}, {'b': 2}]}, {$ or: [{'a': 2}, {'b': 3}]}]})

0 голосов
/ 01 марта 2011

Вы не можете вкладывать несколько $ или операторов.

Это задокументировано здесь:

http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24or

Кроме того: ваш запрос имеет большой смысл.

Если вы пытаетесь запросить для a либо 2, либо 3, а b - 5 или 4:

{a: {$в: [2,3]}, b: {$ в: [4,5]}}

Пожалуйста, не пытайтесь придумывать новый синтаксис.

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