Dzieje się tak, ponieważ collection.withWriteConcern(WriteConcern.UNACKNOWLEDGED); generuje nowy MongoCollection obiekt z innym problemem zapisu, którego nigdy nie używasz:
Poniższy kod:
MongoCollection<Document> dup = collection.withWriteConcern(WriteConcern.UNACKNOWLEDGED);
...
dup.insertOne(doc);
powinno działać, tzn. nie wystąpił błąd.
Co do MongoClient problem dotyczący zapisu na poziomie, który nie jest przenoszony do bazy danych:
public MongoDatabase getDatabase(final String databaseName) {
MongoClientOptions clientOptions = getMongoClientOptions();
return new MongoDatabaseImpl(databaseName, clientOptions.getCodecRegistry(), clientOptions.getReadPreference(),
clientOptions.getWriteConcern(), createOperationExecutor());
}
Jak widać, problem dotyczący zapisu pochodzi z MongoClientOptions ignorowanie wartości parametru przekazanej do mongoClient.setWriteConcern() metoda, która może być błędem.
Tak więc, aby poprawnie ustawić globalny problem związany z zapisem, będziesz musiał utworzyć instancję MongoClientOptions :
MongoClientOptions options = MongoClientOptions
.builder()
.writeConcern(WriteConcern.UNACKNOWLEDGED)
.build();
i przekaż go do MongoClient konstruktor.