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

Zadejte více kritérií pro prvky pole

Abyste pochopili, co říká dokumentace, musíte nejprve pochopit, jak funguje dotaz na rozsah s polem.

Předpokládejme, že máte ve sbírce následující dokument:

{ "finished" : [ 27, 3 ] },
{ "finished" : 17 }

První dotaz:

db.users.find( { "finished": { "$elemMatch": { "$gt": 15, "$lt": 20 } } } )

Vrátí pouze dokument, kde "dokončeno" je pole. Důvodem je $elemMatch Operátor odpovídá pouze dokumentům, kde je pole pole a kde jeden prvek splňuje všechna kritéria dotazu.

Ale druhý dotaz:

db.users.find( { "finished": { "$gt": 15, "$lt": 20 } } )

vrátí oba dokumenty, což pravděpodobně není to, co chcete, jako 27 je větší než 20 a 3 je menší než 15 . Důvodem je 27 odpovídá prvnímu kritériu a 3 druhý. Toto chování je uvedeno v dokumentaci.

...jeden prvek může splnit podmínku větší než 15 a jiný prvek může splnit podmínku menší než 20, nebo jeden prvek může splnit obě:

Závěr:

Dotazy na rozsah proti polím se budou shodovat až do jednoho nebo více prvků v poli, které odpovídají všem kritériím dotazu.

Lekce:

Nepoužívejte rozsahový dotaz s poli. Získáte neočekávaný výsledek.



  1. MongoDB – A co desetinný typ hodnoty?

  2. Jak získat ID objektu v PyMongu po vložení?

  3. MongoDB deleteOne()

  4. Resque on Heroku cedar stack Počet pracovníků stále existuje i po ukončení pracovníka