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

Objet de mise à jour MongoDb dans un tableau lors de la première occurrence à partir de la dernière

Je comprends ce que vous dites en ce que vous voulez faire correspondre le dernier élément dans ce cas ou en fait traiter la correspondance dans l'ordre inverse. Il n'y a aucun moyen de modifier cela et l'index stocké dans le positionnel $ sera toujours la "première" correspondance.

Mais vous pouvez modifier votre approche, car le comportement par défaut de $push consiste à "ajouter" à la fin du tableau. Mais MongoDB 2.6 a introduit un $position modificateur afin que vous puissiez en fait toujours "pré-pendre" au tableau, ce qui signifie que votre élément "le plus ancien" est à la fin.

Prenons ceci par exemple :

db.artest.update(
   { "array": { "$in": [5] } },
   { "$push": { "array": { "$each": [5], "$position": 0 } }},
   { "upsert": true }
)

db.artest.update(
    { "array": { "$in": [5] } },
    { "$push": { "array": { "$each": [6], "$position": 0 } }},
    { "upsert": true }
)

Il en résulte un document qui est "l'inverse" du $push normal comportement :

{ "_id" : ObjectId("53eaf4517d0dc314962c93f4"), "array" : [ 6, 5 ] }

Vous pouvez également appliquer le $sort modificateur lors de la mise à jour de vos documents afin "d'ordonner" les éléments afin qu'ils soient inversés. Mais ce n'est peut-être pas la meilleure option si des valeurs en double sont stockées.

Pensez donc à stocker vos tableaux en "inverse" si vous avez l'intention de faire correspondre les éléments "les plus récents" "en premier". Actuellement, c'est votre seul moyen d'obtenir votre comportement de "correspondance depuis le dernier".