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.