sql >> Databáze >  >> NoSQL >> MongoDB

MongoDB $nebo dotaz

Použít $in

Pro dotaz v otázce je vhodnější použít $in

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

Proč to nefunguje

Chybí citace – cli čeká, až dokončíte druhou část vašeho nebo:

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

Dotaz musíte dokončit dostatečně, aby jej cli analyzovalo, aby pak řeklo, že došlo k chybě syntaxe.

Přiřazování bez rozlišení malých a velkých písmen

Jak je uvedeno v komentáři, pokud chcete vyhledávat bez ohledu na velikost písmen, použijte buď $or s $regex:

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

Nebo jednoduše použijete jeden regulární výraz:

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

Dotaz s regulárním výrazem, který nezačíná pevným řetězcem, však nemůže používat index (nemůže používat index a efektivně „začít zde, dokud nebude nalezena žádná shoda, pak kauce“), a proto není optimální. Pokud je to váš požadavek, je lepší uložit normalizované pole názvu (např. name_lc - název malými písmeny) a zeptejte se na to:

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



  1. Mongoose, aktualizuj hodnoty v poli objektů

  2. Jak můžete určit pořadí vlastností v objektu javascript pro index MongoDB v node.js?

  3. Co dělat a co nedělat Apache HBase

  4. MongoDB převádí datum na řetězec