sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDb opdatere objekt i et array ved første forekomst fra sidst

Jeg forstår, hvad du siger, i og med at du ønsker at matche det sidste element i dette tilfælde eller faktisk behandle kampen i omvendt rækkefølge. Der er ingen måde at ændre dette og indekset gemt i positionelle $ operatør vil altid være det "første" match.

Men du kan ændre din tilgang til dette, som standardadfærden for $push er at "tilføje" til slutningen af ​​arrayet. Men MongoDB 2.6 introducerede en $position modifikator, så du faktisk altid kan "pre-pendere" til arrayet, hvilket betyder, at dit "ældste" element er i slutningen.

Tag dette for eksempel:

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

Dette resulterer i et dokument, der er "omvendt" af den normale $push adfærd:

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

Alternativt kan du anvende $sort modifikator, når du opdaterer dine dokumenter for at "ordne" elementerne, så de blev omvendt. Men det er måske ikke den bedste mulighed, hvis duplikerede værdier er gemt.

Så prøv at gemme dine arrays "omvendt", hvis du har til hensigt at matche de "nyeste" elementer "først". I øjeblikket er det din eneste måde at få din "match fra sidst"-adfærd på.




  1. MongoDB $time

  2. Opdater flere dokumenter ved at levere dokumenter i body, mongoose/mongodb

  3. MongoDB og C#:Uafhængig søgning

  4. Hvad er forskellen på mongoose og mongoJS? Hvilken skal jeg bruge?