MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

WriteConcern des MongoDB-Java-Clients funktioniert nicht

Das liegt daran, dass collection.withWriteConcern(WriteConcern.UNACKNOWLEDGED); generiert eine neue MongoCollection Objekt mit einem anderen Schreibschutz, den Sie nie verwenden:

Der folgende Code:

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

sollte funktionieren, d.h. es wird kein Fehler ausgegeben.

Wie beim MongoClient -Level-Write-Concern, das nicht an die Datenbank weitergegeben wird:

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

Wie Sie sehen können, wird der Schreibschutz von MongoClientOptions übernommen Ignorieren des an mongoClient.setWriteConcern() übergebenen Parameterwerts Methode, die ein Fehler sein kann.

Um also einen globalen Schreibschutz richtig festzulegen, müssen Sie eine Instanz von MongoClientOptions erstellen :

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

und übergeben Sie es an den MongoClient Konstruktor.