MongoDB $или запрос - программирование
Подтвердить что ты не робот

MongoDB $или запрос

Я запускаю следующий запрос в оболочке mongo:

db.Profiles.find ( { $or: [ {"name": "gary"}, {"name": "rob"} ] } )

Он просто возвращает ничего, как ожидалось (JSON)?

4b9b3361

Ответ 1

Используйте $in

Для запроса в вопросе более целесообразно использовать

db.Profiles.find ( { "name" : { $in: ["gary", "rob"] } } );

Почему он не работает

Там отсутствует цитата - кли ждет вас, чтобы закончить вторую часть вашего или:

db.Profiles.find ( { $or : [ { "name" : "gary" }, {"name":"rob} ] } )
..............................................................^

Вам нужно закончить запрос, достаточный для того, чтобы cli проанализировал его для него, чтобы сказать там синтаксическую ошибку.

Нечувствительность к регистру

Как указано комментарием, если вы хотите искать нечувствительным к регистру образом, вы либо используете $or с $regex:

db.Profiles.find ( { $or : [ { "name" : /^gary/i }, {"name": /^rob/i } ] } )

Или вы просто используете одно регулярное выражение:

db.Profiles.find ( { "name" : /^(gary|rob)/i } )

Однако запрос регулярных выражений, который не начинается с фиксированной строки, не может использовать индекс (он не может использовать индекс и эффективно "запускать здесь до тех пор, пока совпадение не будет найдено, а затем залог" ) и, следовательно, является неоптимальным. Если это ваше требование, лучше сохранить нормализованное поле имени (например, name_lc - имя нижнего регистра) и запрос по этому поводу:

db.Profiles.find ( { "name_lc" : { $in: ["gary", "rob"] } } );