sql >> Databáze >  >> NoSQL >> MongoDB

Aktualizační objekt MongoDb v poli při prvním výskytu od posledního

Rozumím tomu, co říkáte, že chcete v tomto případě spárovat poslední prvek nebo ve skutečnosti zpracovat shodu v obráceném pořadí. Toto a index uložený v pozičním $ operátor bude vždy „první“ shoda.

Svůj přístup k tomu ale můžete změnit, protože výchozí chování $push je "připojit" na konec pole. MongoDB 2.6 však zavedlo $position modifikátor, takže ve skutečnosti můžete vždy "předpřipojit" pole, což znamená, že vaše "nejstarší" položka je na konci.

Vezměte si například toto:

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

Výsledkem je dokument, který je "obráceným" normálním $push chování:

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

Případně můžete použít $sort modifikátor při aktualizaci vašich dokumentů za účelem "uspořádat" prvky tak, aby byly obráceny. Ale to nemusí být nejlepší volba, pokud jsou uloženy duplicitní hodnoty.

Pokud tedy máte v úmyslu "nejnovější" položky "nejprve" uložit, podívejte se na ukládání polí "obráceným způsobem". V současné době je to váš jediný způsob, jak dosáhnout chování „shoda od posledního“.




  1. Mongo update element pole (.NET driver 2.0)

  2. Jak zkontrolovat, zda byl dokument vložen nebo aktualizován při použití findOneAndUpdate?

  3. Zpětné volání instance.save() Mongoose.js se nespustí

  4. Obrázek vrácený z REST API se vždy zobrazuje jako poškozený