Đó là bởi vì collection.withWriteConcern(WriteConcern.UNACKNOWLEDGED);
tạo MongoCollection
mới đối tượng có mối quan tâm viết khác mà bạn không bao giờ sử dụng:
Đoạn mã sau:
MongoCollection<Document> dup = collection.withWriteConcern(WriteConcern.UNACKNOWLEDGED);
...
dup.insertOne(doc);
sẽ hoạt động, tức là không có lỗi phát sinh.
Đối với MongoClient
mức độ ghi lo ngại không được truyền đến cơ sở dữ liệu:
public MongoDatabase getDatabase(final String databaseName) {
MongoClientOptions clientOptions = getMongoClientOptions();
return new MongoDatabaseImpl(databaseName, clientOptions.getCodecRegistry(), clientOptions.getReadPreference(),
clientOptions.getWriteConcern(), createOperationExecutor());
}
Như bạn có thể thấy, mối quan tâm ghi được lấy từ MongoClientOptions
bỏ qua giá trị tham số được truyền đến mongoClient.setWriteConcern()
, có thể là một lỗi.
Vì vậy, để đặt mối quan tâm ghi toàn cục đúng cách, bạn sẽ phải tạo một bản sao của MongoClientOptions
:
MongoClientOptions options = MongoClientOptions
.builder()
.writeConcern(WriteConcern.UNACKNOWLEDGED)
.build();
và chuyển nó vào MongoClient
hàm tạo.