MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

MongoDB $oder Abfrage

Verwenden Sie $in

Für die Abfrage in der Frage ist es besser, $in

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

Warum funktioniert es nicht

Es fehlt ein Anführungszeichen - das CLI wartet darauf, dass Sie den zweiten Teil Ihres Oder beenden:

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

Sie müssen die Abfrage so weit beenden, dass das CLI sie parsen kann, um dann zu sagen, dass ein Syntaxfehler vorliegt.

Übereinstimmung ohne Berücksichtigung der Groß-/Kleinschreibung

Wie durch einen Kommentar angegeben, verwenden Sie entweder $or, wenn Sie ohne Berücksichtigung der Groß-/Kleinschreibung suchen möchten mit einem $regex:

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

Oder Sie verwenden einfach eine Regex:

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

Eine Regex-Abfrage, die nicht mit einer festen Zeichenfolge beginnt, kann jedoch keinen Index verwenden (sie kann keinen Index verwenden und effektiv „hier beginnen, bis keine Übereinstimmung gefunden wird, dann bail“) und ist daher suboptimal. Wenn dies Ihre Anforderung ist, ist es besser, ein normalisiertes Namensfeld zu speichern (z. B. name_lc - Name in Kleinbuchstaben) und darauf abfragen:

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