Ответ 1
Mongo 2.0 добавил $и оператор, поэтому вы можете сделать такой запрос:
db.things.find({$and: [{$or : [{'a':1},{'b':2}]},{$or : [{'a':2},{'b':3}]}] })
http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24and
Как я могу использовать несколько $или операций? Пока я пробовал следующее, но он молча игнорирует второй $или.
{
$or: [{a: 2}, {a: 3}],
$or: [{b: 5}, {b: 4}]
}
Я предполагаю, что это потому, что я использую два идентичных ключа. Есть ли способ обойти это?
Mongo 2.0 добавил $и оператор, поэтому вы можете сделать такой запрос:
db.things.find({$and: [{$or : [{'a':1},{'b':2}]},{$or : [{'a':2},{'b':3}]}] })
http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24and
$и не будет выполнять эту работу, так как второй $или не будет проверять, не сработает ли первый.
На странице руководства Монго:
Оператор $и оператор использует оценку короткого замыкания. Если первое выражение (например,) оценивается как false, MongoDB не будет оценивать остальные выражения.
Вложенные $или, однако, должны сделать трюк:
db.things.find({$ или: [{$ или: [{'a': 1}, {'b': 2}]}, {$ или: [{'a': 2}, {'b': 3}]}]})
Для нескольких, как в sql, мы используем $in и не используем $nin vc - это наше имя коллекции здесь. Мы находим, что эта строка содержит cpu или memo.
db.collection('vc').find({ "name" : { $in: [ /cpu/, /memo/ ] } }
Вы не можете вложить несколько $или операторов.
Это описано здесь:
http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24or
Кроме того: ваш запрос имеет смысл.
Если вы пытаетесь запросить для a 2 или 3, а b - 5 или 4:
{a: {$ in: [2,3]}, b: {$ in: [4,5]}}
Пожалуйста, не пытайтесь изобретать новый синтаксис.