2017-08-11 1 views
0

Dire que j'ai un document du format: { arr: [{id: 0}, {id: 1}, .. .., {id: m-1}, {id: m}], n: nombre }MongoDB: Obtention du Nième élément à partir du tableau, lorsque N doit être dérivé du document lui-même

donc un tableau d'objets et une propriété n. Je veux obtenir le nième élément du tableau (arr [n]). Chaque objet de la matrice possède également une propriété id qui correspond à son index. Une autre option consiste à interroger le tableau pour l'élément avec id = n. J'ai fait des recherches sur la façon d'obtenir le Nième élément d'un tableau en utilisant $ tranche, ainsi que $ elemMatch. Je n'arrivais pas à comprendre comment écrire une requête qui renvoie le Nième élément du tableau, quand je ne connais pas la valeur N, et je dois l'obtenir du document lui-même pendant la même requête.

Je peux obtenir le tableau entier, mais il peut devenir très volumineux (même des éléments de 100K +) et je préfère donc obtenir celui dont j'ai besoin, que ce soit dans la partie recherche ou projection de la recherche.

Des idées?

Merci, Sefi

Répondre

0

figured it out :)

Transforme la façon de le faire est d'utiliser trouver ensemble et non, et la définition de la requête en utilisant $ vars laisser:

db.getCollection('<collection>').aggregate([ 
{$match: {key: '<key>'}}, 
{$project: { 
    obj: { 
     $let: { 
      vars: { 
       idx: '$n', 
       objects: '$arr' 
      }, 
      in: {$arrayElemAt: ['$$objects', '$$idx']} 
     } 
    } 
}} 
])