Użyj $in
W przypadku zapytania w pytaniu bardziej odpowiednie jest użycie $in
db.Profiles.find ( { "name" : { $in: ["gary", "rob"] } } );
Dlaczego to nie działa
Brakuje cytatu - CLI czeka, aż skończysz drugą część swojego lub:
db.Profiles.find ( { $or : [ { "name" : "gary" }, {"name":"rob} ] } )
..............................................................^
Musisz zakończyć zapytanie na tyle, aby cli je przeanalizowało i stwierdziło, że wystąpił błąd składni.
Dopasowywanie bez rozróżniania wielkości liter
Jak wskazuje komentarz, jeśli chcesz wyszukiwać bez uwzględniania wielkości liter, użyj $or
z $regexem:
db.Profiles.find ( { $or : [ { "name" : /^gary/i }, {"name": /^rob/i } ] } )
Lub po prostu użyj jednego wyrażenia regularnego:
db.Profiles.find ( { "name" : /^(gary|rob)/i } )
Jednak zapytanie z wyrażeniem regularnym, które nie zaczyna się od ustalonego ciągu znaków, nie może używać indeksu (nie może używać indeksu i skutecznie „rozpocznij tutaj, dopóki nie zostanie znalezione dopasowanie, a następnie zwolnij”) i dlatego jest nieoptymalne. Jeśli takie jest Twoje wymaganie, lepszym pomysłem jest przechowywanie znormalizowanego pola nazwy (np. name_lc
- nazwa małymi literami) i zapytanie o to:
db.Profiles.find ( { "name_lc" : { $in: ["gary", "rob"] } } );