MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Spécifier plusieurs critères pour les éléments du tableau

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.