sql >> Databasteknik >  >> NoSQL >> MongoDB

MongoDB och upsert-problem

För det första ser det inte ut som att du gör en upsert alls. Syntaxen för det i Java API skulle ha ett tredje argument till db.update satt till true.

   db.update(com.mongodb.DBObject, com.mongodb.DBObject, boolean /*upsert */, boolean /* multi */)

Du borde inte göra en $push heller - semantiken för vad du säger att du vill göra i mongo-skalet skulle vara:

db.collection.update( {"resourceVacation":resourceID}, {$set:{"vacationList":[...]}, true)

Detta säger:om resursVacation med resurs-ID finns, gör sedan dess "semesterlista" vad jag ger dig. Om den inte finns infogar du den här posten.

Om du använde Java API direkt skulle motsvarigheten till ovanstående vara tillräcklig.

Det verkar som att du använder MongoTemplate från Spring. Du måste kontrollera vilken version av den du använder eftersom den inte använde för att tillåta upserts . Det problemet markeras dock som löst. Om du har fastnat på den äldre versionen finns det en lösning som beskrivs här .

Om du är på den senaste bör du kunna använda den nyligen tillagda upsert-metoden direkt, som beskrivs här .



  1. Ange flera kriterier i vår mongo db-fråga

  2. MongoEngine:Lägga till fält till dynamiska dokument

  3. Vad är den maximala storleken för GridFS på MongoDB?

  4. Gör nodträd med rekursiv tabell med Express och Mongo