Det beror på att collection.withWriteConcern(WriteConcern.UNACKNOWLEDGED);
genererar en ny MongoCollection
objekt med ett annat skrivproblem som du aldrig använder:
Följande kod:
MongoCollection<Document> dup = collection.withWriteConcern(WriteConcern.UNACKNOWLEDGED);
...
dup.insertOne(doc);
borde fungera, d.v.s. inget fel uppstod.
När det gäller MongoClient
nivå skrivproblem som inte sprids till databasen:
public MongoDatabase getDatabase(final String databaseName) {
MongoClientOptions clientOptions = getMongoClientOptions();
return new MongoDatabaseImpl(databaseName, clientOptions.getCodecRegistry(), clientOptions.getReadPreference(),
clientOptions.getWriteConcern(), createOperationExecutor());
}
Som du kan se är skrivproblemet hämtat från MongoClientOptions
ignorerar parametervärdet som skickas till mongoClient.setWriteConcern()
metod, som kan vara en bugg.
Så för att ställa in ett globalt skrivproblem på rätt sätt måste du skapa en instans av MongoClientOptions
:
MongoClientOptions options = MongoClientOptions
.builder()
.writeConcern(WriteConcern.UNACKNOWLEDGED)
.build();
och skicka den till MongoClient
konstruktör.