Usar $in
Para a consulta na pergunta, é mais apropriado usar $in
db.Profiles.find ( { "name" : { $in: ["gary", "rob"] } } );
Por que não funciona
Falta uma citação - o cli está esperando você terminar a segunda parte do seu ou:
db.Profiles.find ( { $or : [ { "name" : "gary" }, {"name":"rob} ] } )
..............................................................^
Você precisa terminar a consulta o suficiente para que o cli a analise e diga que há um erro de sintaxe.
Correspondência sem distinção entre maiúsculas e minúsculas
Conforme indicado por um comentário, se você quiser pesquisar sem diferenciar maiúsculas de minúsculas, use
$or
com uma $regex:db.Profiles.find ( { $or : [ { "name" : /^gary/i }, {"name": /^rob/i } ] } )
Ou, você simplesmente usa um regex:
db.Profiles.find ( { "name" : /^(gary|rob)/i } )
No entanto, uma consulta regex que não inicia com uma string fixa não pode usar um índice (ela não pode usar um índice e efetivamente "começa aqui até que nenhuma correspondência seja encontrada e depois baile") e, portanto, não é ideal. Se este for o seu requisito, é melhor armazenar um campo de nome normalizado (por exemplo,
name_lc
- nome em minúsculas) e faça uma consulta sobre isso:db.Profiles.find ( { "name_lc" : { $in: ["gary", "rob"] } } );