Đầu tiên, nó không giống như bạn đang làm một chút nào. Cú pháp cho điều đó trong Java API sẽ có đối số thứ ba để db.update được đặt thành true.
db.update(com.mongodb.DBObject, com.mongodb.DBObject, boolean /*upsert */, boolean /* multi */)
Bạn cũng không nên thực hiện $ push - ngữ nghĩa của những gì bạn nói bạn muốn làm trong mongo shell sẽ là:
db.collection.update( {"resourceVacation":resourceID}, {$set:{"vacationList":[...]}, true)
Điều này nói rằng:nếu resourceVacation có resourceID tồn tại, thì hãy tạo "danh sách kỳ nghỉ" của nó như những gì tôi đang cung cấp cho bạn. Nếu nó không tồn tại thì hãy chèn bản ghi này.
Nếu bạn đang sử dụng Java API trực tiếp, thì tương đương với những điều trên là đủ.
Có vẻ như bạn đang sử dụng MongoTemplate từ Spring. Bạn sẽ cần kiểm tra xem mình đang sử dụng phiên bản nào vì phiên bản này không được sử dụng để cho phép cảnh báo . Vấn đề đó được đánh dấu là đã giải quyết xong. Nếu bạn bị mắc kẹt trên phiên bản cũ hơn, thì có một giải pháp được mô tả tại đây .
Nếu bạn đang sử dụng phiên bản mới nhất, bạn sẽ có thể sử dụng trực tiếp phương thức upert mới được thêm vào, như được mô tả tại đây .