まず、アップサートを行っているようには見えません。 Java APIでのその構文では、db.updateの3番目の引数がtrueに設定されます。
db.update(com.mongodb.DBObject, com.mongodb.DBObject, boolean /*upsert */, boolean /* multi */)
$pushも実行しないでください。mongoシェルで実行したいことのセマンティクスは次のようになります。
db.collection.update( {"resourceVacation":resourceID}, {$set:{"vacationList":[...]}, true)
つまり、resourceIDを持つresourceVacationが存在する場合は、その「vacationList」を私が提供するものにします。存在しない場合は、このレコードを挿入してください。
Java APIを直接使用している場合は、上記と同等のもので十分です。
SpringのMongoTemplateを使用しているようです。 upsertsを許可するために使用されなかったため、使用しているバージョンを確認する必要があります。 。ただし、その問題は解決済みとしてマークされています。古いバージョンで立ち往生している場合は、ここ 。
最新の場合は、ここ 。