Използвайте $in
За заявката във въпроса е по-подходящо да използвате $in
db.Profiles.find ( { "name" : { $in: ["gary", "rob"] } } );
Защо не работи
Липсва цитат - CLI ви чака да завършите втората част на вашия или:
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"] } } );