Tout d'abord, il ne semble pas du tout que vous fassiez un upsert. La syntaxe pour cela dans l'API Java aurait un troisième argument pour db.update défini sur true.
db.update(com.mongodb.DBObject, com.mongodb.DBObject, boolean /*upsert */, boolean /* multi */)
Vous ne devriez pas non plus faire un $push - la sémantique de ce que vous dites que vous voulez faire dans mongo shell serait :
db.collection.update( {"resourceVacation":resourceID}, {$set:{"vacationList":[...]}, true)
Cela dit:si resourceVacation ayant un resourceID existe, alors faites de sa "vacationList" ce que je vous donne. S'il n'existe pas, insérez cet enregistrement.
Si vous utilisiez directement l'API Java, l'équivalent de ce qui précède serait suffisant.
On dirait que vous utilisez MongoTemplate de Spring. Vous devrez vérifier quelle version de celui-ci vous utilisez car elle n'a pas été utilisée pour autoriser les upserts . Ce problème est cependant marqué comme résolu. Si vous êtes bloqué sur l'ancienne version, il existe une solution de contournement décrite ici .
Si vous utilisez la dernière version, vous devriez pouvoir utiliser directement la méthode upsert nouvellement ajoutée, comme décrit ici .