ejemplos - mongodb aggregate lookup
MongoDB $ o consulta (1)
Usar $ en
Para la consulta en la pregunta, es más apropiado usar $in
db.Profiles.find ( { "name" : { $in: ["gary", "rob"] } } );
Porque no funciona
Falta una cita: el cli está esperando a que termines la segunda parte de tu o:
db.Profiles.find ( { $or : [ { "name" : "gary" }, {"name":"rob} ] } )
..............................................................^
Debe finalizar la consulta lo suficiente para que el cli la analice y luego diga que hay un error de sintaxis.
Coincidencia insensible a mayúsculas
Como lo indica un comentario, si desea buscar de una manera que no distinga entre mayúsculas y minúsculas, entonces usa $or
con $regex :
db.Profiles.find ( { $or : [ { "name" : /^gary/i }, {"name": /^rob/i } ] } )
O simplemente usa una expresión regular:
db.Profiles.find ( { "name" : /^(gary|rob)/i } )
Sin embargo, una consulta de expresiones regulares que no comienza con una cadena fija no puede usar un índice (no puede usar un índice y efectivamente hace que "comience aquí hasta que no se encuentre una coincidencia, entonces salga") y, por lo tanto, no es óptima. Si este es su requisito, es una mejor idea almacenar un campo de nombre normalizado (por ejemplo, name_lc
- nombre en minúscula) y consultar sobre eso:
db.Profiles.find ( { "name_lc" : { $in: ["gary", "rob"] } } );
Ejecuto la siguiente consulta en mongo shell:
db.Profiles.find ( { $or: [ {"name": "gary"}, {"name": "rob"} ] } )
¿Solo devuelve nada como esperaba (JSON)?