MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

O WriteConcern do cliente java MongoDB não funciona


Isso porque collection.withWriteConcern(WriteConcern.UNACKNOWLEDGED); gera um novo MongoCollection objeto com uma preocupação de gravação diferente que você nunca usa:

O seguinte código:
MongoCollection<Document> dup = collection.withWriteConcern(WriteConcern.UNACKNOWLEDGED);
...
dup.insertOne(doc);

deve funcionar, ou seja, nenhum erro gerado.

Quanto ao MongoClient preocupação de gravação de nível que não é propagada para o banco de dados:
public MongoDatabase getDatabase(final String databaseName) {
    MongoClientOptions clientOptions = getMongoClientOptions();
    return new MongoDatabaseImpl(databaseName, clientOptions.getCodecRegistry(), clientOptions.getReadPreference(),
            clientOptions.getWriteConcern(), createOperationExecutor());
}

Como você pode ver, o problema de gravação é retirado de MongoClientOptions ignorando o valor do parâmetro passado para mongoClient.setWriteConcern() método, o que pode ser um bug.

Portanto, para definir uma preocupação de gravação global corretamente, você precisará criar uma instância de MongoClientOptions :
 MongoClientOptions options = MongoClientOptions
     .builder()
     .writeConcern(WriteConcern.UNACKNOWLEDGED)
     .build();

e passe para o MongoClient construtor.