За да разберете какво се казва в документацията, първо трябва да разберете как работи заявката за диапазон с масив.
Да предположим, че имате следния документ в колекцията си:
{ "finished" : [ 27, 3 ] },
{ "finished" : 17 }
Първата заявка:
db.users.find( { "finished": { "$elemMatch": { "$gt": 15, "$lt": 20 } } } )
Ще върне само документа, където "finished" е масив. Това е така, защото $elemMatch
Операторът съвпада само с документи, където полето е масив и където един елемент отговаря на всички критерии за заявка.
Но втората заявка:
db.users.find( { "finished": { "$gt": 15, "$lt": 20 } } )
ще върне и двата документа, което вероятно не е това, което искате като 27
е по-голямо от 20
и 3
е по-малко от 15
. Това е така, защото 27
отговаря на първия критерии и 3
секундата. Това поведение е споменато в документацията.
...един елемент може да удовлетвори условието по-голямо от 15, а друг елемент може да удовлетвори условието по-малко от 20, или един елемент може да удовлетвори и двете:
Заключение:
Заявките за диапазон срещу масиви ще съвпадат до един или няколко елемента в масива, които отговарят на всички критерии за заявка.
Урок:
Не използвайте заявка за диапазон с масиви. Ще получите неочакван резултат.