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

MongoDB $o query

Usa $in

Per la query nella domanda, è più appropriato utilizzare $in

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

Perché non funziona

Manca una citazione:il cli sta aspettando che tu finisca la seconda parte del tuo o:

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

Devi completare la query in modo sufficiente affinché il cli la analizzi per poi dire che c'è un errore di sintassi.

Corrispondenza senza distinzione tra maiuscole e minuscole

Come indicato da un commento, se desideri eseguire una ricerca senza distinzione tra maiuscole e minuscole, puoi utilizzare $or con una $regex:

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

Oppure, usi semplicemente un'espressione regolare:

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

Tuttavia, una query regex che non inizia con una stringa fissa non può utilizzare un indice (non può utilizzare un indice ed effettivamente "inizia qui finché non viene trovata alcuna corrispondenza, quindi salva") e quindi non è ottimale. Se questo è il tuo requisito, è meglio memorizzare un campo nome normalizzato (ad es. name_lc - nome minuscolo) e interrogare su quello:

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