sql >> Base de Datos >  >> NoSQL >> MongoDB

Problema de MongoDB y upsert

Primero, no parece que estés haciendo un upsert en absoluto. La sintaxis para eso en la API de Java tendría un tercer argumento para db.update establecido en verdadero.

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

Tampoco deberías estar haciendo $push:la semántica de lo que dices que quieres hacer en mongo shell sería:

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

Esto dice:si resourceVacation tiene resourceID existe, entonces haga su "vacationList" lo que le estoy dando. Si no existe, inserte este registro.

Si estuviera usando la API de Java directamente, el equivalente de lo anterior sería suficiente.

Parece que estás usando MongoTemplate de Spring. Deberá verificar qué versión está usando porque no permitía upserts . Sin embargo, ese problema está marcado como resuelto. Si está atascado en la versión anterior, hay una solución alternativa descrita aquí .

Si tiene la última versión, debería poder usar el método upsert recién agregado directamente, como se describe aquí .