MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

MongoDb aktualizuje obiekt w tablicy przy pierwszym wystąpieniu od ostatniego

Rozumiem, co mówisz, że chcesz dopasować ostatni element w tym przypadku, a właściwie przetworzyć dopasowanie w odwrotnej kolejności. Nie ma możliwości zmiany tego i indeksu przechowywanego w pozycyjnym $ operator zawsze będzie „pierwszym” dopasowaniem.

Ale możesz zmienić swoje podejście do tego, jako domyślne zachowanie $push jest "dołączenie" na końcu tablicy. Ale MongoDB 2.6 wprowadził $position modyfikator, dzięki czemu w rzeczywistości zawsze możesz „dołączyć” do tablicy, co oznacza, że ​​„najstarszy” element znajduje się na końcu.

Weźmy na przykład:

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

Powoduje to powstanie dokumentu, który jest "odwrotnością" normalnego $push zachowanie:

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

Alternatywnie możesz zastosować $sort modyfikator podczas aktualizacji dokumentów, aby „uporządkować” elementy tak, aby były odwrócone. Ale może to nie być najlepsza opcja, jeśli przechowywane są zduplikowane wartości.

Więc spójrz na przechowywanie swoich tablic w "odwróconej", jeśli zamierzasz dopasować "najnowsze" elementy "najpierw". Obecnie jest to jedyny sposób na uzyskanie „dopasowania z ostatniego” zachowania.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. activerecord i most mongo / mongo-mapper

  2. Czy można używać identyfikatora obiektu Mongo jako unikalnego identyfikatora? Jeśli tak, jak mogę przekonwertować go na ciąg i wyszukać go według ciągu?

  3. Gdzie MongoDB przechowuje swoje dokumenty?

  4. Mongo wyświetla błąd zduplikowanego klucza w polu _id_ w aplikacji Meteor

  5. Jak MongoDB porządkuje swoje dokumenty w jednej kolekcji?