Pertama, sepertinya Anda tidak melakukan upsert sama sekali. Sintaks untuk itu di Java API akan memiliki argumen ketiga untuk db.update disetel ke true.
db.update(com.mongodb.DBObject, com.mongodb.DBObject, boolean /*upsert */, boolean /* multi */)
Anda juga tidak boleh melakukan $push - semantik dari apa yang Anda katakan ingin Anda lakukan di mongo shell adalah:
db.collection.update( {"resourceVacation":resourceID}, {$set:{"vacationList":[...]}, true)
Ini mengatakan:jika resourceVacation memiliki resourceID ada, maka buat "vacationList"-nya seperti yang saya berikan kepada Anda. Jika tidak ada, masukkan catatan ini.
Jika Anda menggunakan Java API secara langsung, persamaan di atas sudah cukup.
Sepertinya Anda menggunakan MongoTemplate dari Spring. Anda perlu memeriksa versi apa yang Anda gunakan karena tidak digunakan untuk mengizinkan upsert . Masalah itu ditandai sebagai terselesaikan. Jika Anda terjebak pada versi yang lebih lama, maka ada solusi yang dijelaskan di sini .
Jika Anda adalah yang terbaru, Anda seharusnya dapat menggunakan metode upsert yang baru ditambahkan secara langsung, seperti yang dijelaskan di sini .