Pour comprendre ce que dit la documentation, vous devez d'abord comprendre comment fonctionne la requête de plage avec tableau.
Supposons que vous ayez le document suivant dans votre collection :
{ "finished" : [ 27, 3 ] },
{ "finished" : 17 }
La première requête :
db.users.find( { "finished": { "$elemMatch": { "$gt": 15, "$lt": 20 } } } )
Ne renverra que le document où "fini" est un tableau. C'est parce que $elemMatch
l'opérateur correspond uniquement aux documents où le champ est un tableau et où un seul élément satisfait tous les critères de la requête.
Mais la deuxième requête :
db.users.find( { "finished": { "$gt": 15, "$lt": 20 } } )
renverra les deux documents, ce qui n'est probablement pas ce que vous voulez comme 27
est supérieur à 20
et 3
est inférieur à 15
. C'est parce que 27
correspond au premier critère et 3
la deuxième. Ce comportement est ce qui est mentionné dans la documentation.
... un élément peut satisfaire la condition supérieure à 15 et un autre élément peut satisfaire la condition inférieure à 20, ou un seul élément peut satisfaire les deux :
Conclusion :
Les requêtes de plage sur des tableaux correspondront à un ou plusieurs éléments du tableau correspondant à tous les critères de requête.
Leçon :
N'utilisez pas de requête de plage avec des tableaux. Vous obtiendrez un résultat inattendu.