MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

MongoDb актуализира обект в масив при първото срещане от последното

Разбирам какво казвате, че искате да съпоставите последния елемент в този случай или всъщност да обработите съвпадението в обратен ред. Няма начин да промените това и индекса, съхранен в позиционния $ винаги ще бъде "първото" съвпадение.

Но можете да промените подхода си към това, като поведението по подразбиране на $push е да "добавя" към края на масива. Но MongoDB 2.6 въведе $position модификатор, за да можете всъщност винаги да "предварително добавяте" към масива, което означава, че вашият "най-стар" елемент е в края.

Вземете това например:

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

Това води до документ, който е „обратен“ на нормалния $push поведение:

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

Като алтернатива можете да приложите $sort модификатор, когато актуализирате вашите документи, за да "подредите" елементите, така че да бъдат обърнати. Но това може да не е най-добрият вариант, ако се съхраняват дублирани стойности.

Така че помислете за съхраняването на вашите масиви в "обратен ред", ако възнамерявате да съпоставите "най-новите" елементи "първо". Понастоящем това е единственият ви начин да получите поведението си „съвпадение от последното“.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как да комбинирам два израза $and в оператор $or в mongodb?

  2. Mongodb регулярен израз в агрегация, използвайки препратка към стойността на полето

  3. Вмъкнете, ако не съществува, в противен случай премахнете MongoDB

  4. MongoDB и част от думата за търсене в пълен текст

  5. Какви са предимствата от използването на база данни без схеми като MongoDB в сравнение с релационна база данни?