MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

MongoDB e problema di upsert

Primo, non sembra affatto che tu stia facendo un upsert. La sintassi per quello nell'API Java avrebbe un terzo argomento per db.update impostato su true.

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

Non dovresti nemmeno fare un $ push:la semantica di ciò che dici di voler fare in mongo shell sarebbe:

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

Questo dice:se esiste ResourceVacation con ResourceID, crea la sua "lista delle vacanze" come ti sto dando. Se non esiste, inserisci questo record.

Se stavi utilizzando direttamente l'API Java, sarebbe sufficiente l'equivalente di quanto sopra.

Sembra che tu stia usando MongoTemplate dalla primavera. Dovrai controllare quale versione stai utilizzando perché non è stata utilizzata per consentire upsert . Quel problema è contrassegnato come risolto. Se sei bloccato sulla versione precedente, è descritta una soluzione alternativa qui .

Se sei l'ultimo, dovresti essere in grado di utilizzare direttamente il metodo upsert appena aggiunto, come descritto qui .