sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB $or forespørgsel

Brug $in

For forespørgslen i spørgsmålet er det mere passende at bruge $in

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

Hvorfor virker det ikke

Der mangler et citat - cli'en venter på, at du afslutter anden del af din eller:

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

Du skal afslutte forespørgslen tilstrækkeligt til, at cli'en kan parse den, så den derefter kan sige, at der er en syntaksfejl.

Tilpasning af store og små bogstaver

Som angivet af en kommentar, hvis du ønsker at søge på en måde, hvor der ikke er store og små bogstaver, skal du enten bruge $or med et $regex:

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

Eller du bruger blot et regulært udtryk:

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

Men en regex-forespørgsel, der ikke starter med en fast streng, kan ikke bruge et indeks (den kan ikke bruge et indeks og "starter her, indtil der ikke findes nogen match, så kaution") og er derfor suboptimal. Hvis dette er dit krav, er det en bedre idé at gemme et normaliseret navnefelt (f.eks. name_lc - navn med små bogstaver) og forespørg om det:

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



  1. Mongo rækkefølge efter længde af array

  2. Hvordan definerer jeg metoder i en Mongoose-model?

  3. HSET hvis nøgle findes

  4. Hvorfor udløber Redis-nøgler ikke?