Avec les index composés où l'un des champs indexés est un tableau, MongoDB n'utilisera qu'une limite inférieure ou supérieure pour la requête de plage afin de s'assurer que les correspondances correctes sont renvoyées. Voir SERVER-958 pour un exemple où la contrainte aux limites d'index supérieures et inférieures ne trouverait pas le document attendu.
Si votre requête de plage est sur le champ tableau, vous pouvez potentiellement utiliser le $elemMatch
pour optimiser votre requête dans les limites d'index attendues. Comme dans MongoDB 2.4, le $elemMatch
L'opérateur ne fonctionne pas sur les champs non-tableaux, donc malheureusement, cela n'aide pas votre cas d'utilisation. Vous pouvez regarder/voter pour SERVER-6050 :Envisagez d'autoriser $elemMatch appliqué à des non-tableaux
dans l'outil de suivi des problèmes MongoDB.
Il existe également un problème ouvert SERVER-7959 :des analyses potentiellement inattendues avec des index composés lorsque certains champs sont à plusieurs clés décrivant ce comportement.