MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

WriteConcern du client Java MongoDB ne fonctionne pas

C'est parce que collection.withWriteConcern(WriteConcern.UNACKNOWLEDGED); génère une nouvelle MongoCollection objet avec un souci d'écriture différent que vous n'utilisez jamais :

Le code suivant :

MongoCollection<Document> dup = collection.withWriteConcern(WriteConcern.UNACKNOWLEDGED);
...
dup.insertOne(doc);

devrait fonctionner, c'est-à-dire qu'aucune erreur n'a été générée.

Quant au MongoClient problème d'écriture de niveau qui n'est pas propagé à la base :

public MongoDatabase getDatabase(final String databaseName) {
    MongoClientOptions clientOptions = getMongoClientOptions();
    return new MongoDatabaseImpl(databaseName, clientOptions.getCodecRegistry(), clientOptions.getReadPreference(),
            clientOptions.getWriteConcern(), createOperationExecutor());
}

Comme vous pouvez le voir, le problème d'écriture provient de MongoClientOptions en ignorant la valeur du paramètre transmise à mongoClient.setWriteConcern() méthode, qui peut être un bogue.

Ainsi, pour définir correctement une préoccupation d'écriture globale, vous devrez créer une instance de MongoClientOptions :

 MongoClientOptions options = MongoClientOptions
     .builder()
     .writeConcern(WriteConcern.UNACKNOWLEDGED)
     .build();

et transmettez-le au MongoClient constructeur.