MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

MongoDB ou requête

Utilisez $in

Pour la requête dans la question, il est plus approprié d'utiliser $in

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

Pourquoi ça ne marche pas

Il manque un guillemet - le cli attend que vous terminiez la deuxième partie de votre or :

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

Vous devez terminer la requête suffisamment pour que le cli l'analyse pour qu'il dise ensuite qu'il y a une erreur de syntaxe.

Correspondance insensible à la casse

Comme indiqué par un commentaire, si vous souhaitez effectuer une recherche sans tenir compte de la casse, vous utilisez soit $or avec une $regex :

db.Profiles.find ( { $or : [ { "name" : /^gary/i }, {"name": /^rob/i } ] } )

Ou, vous utilisez simplement une regex :

db.Profiles.find ( { "name" : /^(gary|rob)/i } )

Cependant, une requête regex qui ne commence pas par une chaîne fixe ne peut pas utiliser d'index (elle ne peut pas utiliser d'index et fait effectivement "commencer ici jusqu'à ce qu'aucune correspondance ne soit trouvée puis bail") et est donc sous-optimale. Si tel est votre besoin, il est préférable de stocker un champ de nom normalisé (par exemple, name_lc - nom en minuscules) et requête à ce sujet :

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