sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDb uppdatera objekt i en array vid första förekomsten från sist

Jag förstår vad du säger i och med att du vill matcha det sista elementet i det här fallet eller faktiskt bearbeta matchningen i omvänd ordning. Det finns inget sätt att ändra detta och indexet som är lagrat i positionella $ operatören kommer alltid att vara den "första" matchningen.

Men du kan ändra din inställning till detta, som standardbeteendet för $push är att "lägga till" i slutet av arrayen. Men MongoDB 2.6 introducerade en $position modifierare så att du faktiskt alltid kan "pre-pend" till arrayen vilket betyder att ditt "äldsta" objekt är i slutet.

Ta detta till exempel:

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 }
)

Detta resulterar i ett dokument som är "omvänt" av den normala $push beteende:

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

Alternativt kan du använda $sort modifierare när du uppdaterar dina dokument för att "ordna" elementen så att de blev omvända. Men det kanske inte är det bästa alternativet om duplicerade värden lagras.

Så titta på att lagra dina arrayer "omvänt" om du tänker matcha de "nyaste" objekten "först". För närvarande är det ditt enda sätt att få ditt "match från sist" beteende.




  1. The ABCs of NestJS:En nybörjarguide med MongoDB(Mongoose).

  2. MongoDB $min Aggregation Pipeline Operator

  3. Status 500 Internt serverfel i IE-11 med Angular Js Application

  4. visar summan av alla hämtade filer i mongodb-nodejs drivrutin