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.