Ghi & Lịch sử hàng loạt
Phân biệt sự khác biệt giữa lưu trữ thông thường áp dụng vòng đời lưu trữ và hành vi của bulk insert/upsert, sao lưu xóa, snapshot lịch sử.
save / saveAll
save(entity)
Nếu không có id, sử dụng insertOne, nếu có id, sử dụng _id làm tiêu chí cho replaceOne(..., upsert=true).
saveAll(...)
Thực hiện save() cho mỗi thực thể, do đó hook vòng đời beforePersist/afterPersist được áp dụng.
Lựa chọn API hàng loạt
saveAllBulk
Bulk insert dựa trên insertMany. Đây không phải là API cập nhật id hiện có.
saveAllBulkUpsert
Nếu không có id thực thể, thực hiện insert, nếu có thì thực hiện lọc _id + $set + upsert.
saveAllBulkUpsertByKey
Thực hiện upsert dựa trên khóa phức hợp công việc. Nếu một trong các khóa không có, thực thể đó sẽ được xử lý như một insert.
Xóa thực thể và xóa bản sao lưu
backup을 활성화하면 <sourceCollection>_remove collection을 사용합니다. delete와 backup을 하나의 원자 작업으로 묶어야 한다면 호출 측에서 getTxJob(...) transaction 범위를 잡습니다.
Ảnh chụp lịch sử
createHistory는 현재 MongoExecutionContext.write(...) 결과를 deep copy하고 _id를 제거한 뒤 <sourceCollection>_history 또는 지정한 prefix collection에 insert합니다. history write도 save lifecycle hook을 호출하지 않습니다.