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

Aktualizujte vnořený objekt v MongoDB, pokud existuje, jinak jej přidejte

Vložení dokumentu, pokud neexistuje, se provádí pomocí upsert a pokud chcete aktualizovat podmíněně vložený dokument, potřebujete poziční operátor $. K implementaci výše uvedené funkce tedy musíte v dotazu použít obojí.

Momentálně ale mongodb nepodporuje upserting pomocí $ pozičního operátoru

Takže to, co chcete, zatím není možné udělat v jednom dotazu, případně to můžete udělat ve dvou dotazech.

První

db.collection('ratings').update(
  {"refid":refid, "votes.ip": ip},
  {
     $set: { "votes.$.rating":rating }
  }
)

Vrací počet aktualizovaných dokumentů, pokud je 1, je to v pořádku, a pokud je 0, musíte odeslat nový záznam.

db.collection('ratings').update( { "refid":refid, "votes.ip":{$ne: ip}},
    {$push: { votes: { "ip":ip , "rating":rating  }}
})

Existuje také jira ticket pro poziční operátor a upserting, hlasujte prosím pro toto vydání, pokud chcete tuto funkcionalitu v mongodb. Níže je odkaz na vydání

https://jira.mongodb.org/browse/SERVER-3326

(UPRAVIT :Vstupenka jira byla uzavřena pomocí Nebudu dělat v červnu 2019)



  1. Neplatné ns při připojování k serveru mongodb

  2. Jaký je správný způsob nastavení sady replik mongodb pomocí dockeru a obr?

  3. Jak najít čas operace poslední aktualizace/vložení/smazání na kolekci mongodb bez pole objectid

  4. stránkování pole mongoDB