Eso es porque collection.withWriteConcern(WriteConcern.UNACKNOWLEDGED);
genera una nueva MongoCollection
objeto con una preocupación de escritura diferente que nunca usa:
El siguiente código:
MongoCollection<Document> dup = collection.withWriteConcern(WriteConcern.UNACKNOWLEDGED);
...
dup.insertOne(doc);
debería funcionar, es decir, no se genera ningún error.
En cuanto al MongoClient
Problema de escritura de nivel que no se propaga a la base de datos:
public MongoDatabase getDatabase(final String databaseName) {
MongoClientOptions clientOptions = getMongoClientOptions();
return new MongoDatabaseImpl(databaseName, clientOptions.getCodecRegistry(), clientOptions.getReadPreference(),
clientOptions.getWriteConcern(), createOperationExecutor());
}
Como puede ver, la preocupación de escritura se toma de MongoClientOptions
ignorando el valor del parámetro pasado a mongoClient.setWriteConcern()
método, que puede ser un error.
Por lo tanto, para establecer correctamente una preocupación de escritura global, deberá crear una instancia de MongoClientOptions
:
MongoClientOptions options = MongoClientOptions
.builder()
.writeConcern(WriteConcern.UNACKNOWLEDGED)
.build();
y pásalo al MongoClient
constructor.