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.