Đó 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.