MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

MongoDB $ ou consulta

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"] } } );