sql >> Base de Datos >  >> NoSQL >> MongoDB

MongoDB $o consulta

Usar $en

Para la consulta en la pregunta, es más apropiado usar $in

db.Profiles.find ( { "name" : { $in: ["gary", "rob"] } } );

¿Por qué no funciona?

Falta una cita:la CLI está esperando 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 y minúsculas

Como lo indica un comentario, si desea buscar sin distinguir entre mayúsculas y minúsculas, entonces use $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 "comienza aquí hasta que no se encuentre ninguna coincidencia y luego se libera") 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úsculas) y consulta sobre eso:

db.Profiles.find ( { "name_lc" : { $in: ["gary", "rob"] } } );