sql >> Databasteknik >  >> NoSQL >> MongoDB

Uppdatera kapslade objekt i MongoDB om det finns, annars lägg till det

För att infoga ett dokument om det inte finns görs med upsert och om du vill uppdatera ett villkorligt inbäddat dokument behöver du $ positionsoperator. Så du måste använda båda i fråga för att implementera ovanstående funktionalitet.

Men just nu stöder mongodb inte upserting med $ positional operator

Så det du vill är inte möjligt att göra det i en fråga för närvarande, alternativt kan du göra det i två frågor.

Först

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

Den returnerar antalet uppdaterade dokument, om det är 1 går det bra, och om det är 0 måste du trycka på ny post.

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

Det finns också jira-biljett för positionsoperatör och upserting, rösta gärna på den här frågan om du vill ha den här funktionen i mongodb. Nedan är länken för utfärdandet

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

(REDIGERA :Jira-biljetten stängdes med Won't Do i juni 2019)



  1. Mungos sammanfogningsdata

  2. azurfunktion (nod) som anropar mongodb avslutas utan fel men ingenting kommer tillbaka från frågan

  3. Heroku förkompilerar inte mina tillgångar för att förbereda min app för tillgångspipeline

  4. Mongo väntar på 27017 även efter ominstallation