Použít $in
Pro dotaz v otázce je vhodnější použít $in
db.Profiles.find ( { "name" : { $in: ["gary", "rob"] } } );
Proč to nefunguje
Chybí citace – cli čeká, až dokončíte druhou část vašeho nebo:
db.Profiles.find ( { $or : [ { "name" : "gary" }, {"name":"rob} ] } )
..............................................................^
Dotaz musíte dokončit dostatečně, aby jej cli analyzovalo, aby pak řeklo, že došlo k chybě syntaxe.
Přiřazování bez rozlišení malých a velkých písmen
Jak je uvedeno v komentáři, pokud chcete vyhledávat bez ohledu na velikost písmen, použijte buď $or
s $regex:
db.Profiles.find ( { $or : [ { "name" : /^gary/i }, {"name": /^rob/i } ] } )
Nebo jednoduše použijete jeden regulární výraz:
db.Profiles.find ( { "name" : /^(gary|rob)/i } )
Dotaz s regulárním výrazem, který nezačíná pevným řetězcem, však nemůže používat index (nemůže používat index a efektivně „začít zde, dokud nebude nalezena žádná shoda, pak kauce“), a proto není optimální. Pokud je to váš požadavek, je lepší uložit normalizované pole názvu (např. name_lc
- název malými písmeny) a zeptejte se na to:
db.Profiles.find ( { "name_lc" : { $in: ["gary", "rob"] } } );