sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB $or fråga

Använd $in

För frågan i frågan är det mer lämpligt att använda $in

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

Varför fungerar det inte

Det saknas ett citat - cli väntar på att du ska avsluta den andra delen av din eller:

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

Du måste slutföra frågan tillräckligt för att CLI ska kunna analysera den för att sedan säga att det finns ett syntaxfel.

Skaftokänslig matchning

Som indikeras av en kommentar, om du vill söka på ett skiftlägesokänsligt sätt, använder du antingen $or med ett $regex:

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

Eller så använder du helt enkelt ett regex:

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

Men en regex-fråga som inte börjar med en fast sträng kan inte använda ett index (den kan inte använda ett index och "starta här tills ingen matchning hittas och sedan borgen") och är därför suboptimal. Om detta är ditt krav är det en bättre idé att lagra ett normaliserat namnfält (t.ex. name_lc - gemener namn) och fråga om det:

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



  1. Redis pub/sub on rails

  2. Det bästa mönstret för att hantera asynkron looping i Node.js

  3. Varför misslyckas mina MongooseJS ObjectIds i likhetstestet?

  4. MongoDB C#:ID Serialization bästa mönstret