Я запускаю следующий запрос в оболочке mongo:
db.Profiles.find ( { $or: [ {"name": "gary"}, {"name": "rob"} ] } )
Он просто возвращает ничего, как ожидалось (JSON)?
Я запускаю следующий запрос в оболочке mongo:
db.Profiles.find ( { $or: [ {"name": "gary"}, {"name": "rob"} ] } )
Он просто возвращает ничего, как ожидалось (JSON)?
Для запроса в вопросе более целесообразно использовать $в
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"] } } );