sql >> Base de Datos >  >> NoSQL >> MongoDB

WriteConcern del cliente Java de MongoDB no funciona

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.