sql >> Database >  >> NoSQL >> MongoDB

MongoDb update-object in een array op eerste plaats van laatste

Ik begrijp wat je zegt, omdat je in dit geval het laatste element wilt matchen of in feite de match in omgekeerde volgorde wilt verwerken. Er is geen manier om dit te wijzigen en de index die is opgeslagen in de positionele $ operator zal altijd de "eerste" match zijn.

Maar u kunt uw benadering hiervan wijzigen, aangezien het standaardgedrag van $push is om "toe te voegen" aan het einde van de array. Maar MongoDB 2.6 introduceerde een $position modifier zodat u in feite altijd kunt "pre-pend" naar de array, wat betekent dat uw "oudste" item aan het einde staat.

Neem dit bijvoorbeeld:

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

Dit resulteert in een document dat het "omgekeerde" is van de normale $push gedrag:

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

Als alternatief kunt u de $sort modifier bij het bijwerken van uw documenten om de elementen te "ordenen" zodat ze omgekeerd waren. Maar dat is misschien niet de beste optie als dubbele waarden worden opgeslagen.

Dus kijk naar het opslaan van uw arrays in "reverse" als u van plan bent om de "nieuwste" items "eerst" te matchen. Momenteel is dat de enige manier om je "match van laatste"-gedrag te krijgen.




  1. Express-sessie mongodb-sessie gaat niet door

  2. MongoDB $rand

  3. redis:teller elke dag resetten

  4. Kaart verkleinen met mongo op genest document