Ich bin ein Neuling, MongoDB zu verwenden. Ich importierte gerade das neueste MongoDB Java-Client über Maven:MongoDB Java-Client WriteConcern funktioniert nicht
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.2.2</version>
</dependency>
Und dann habe ich ein sehr einfaches Programm, um den Einsatz Betrieb zu testen.
//I use a replicaset
MongoClient mongoClient = new MongoClient(
Arrays.asList(new ServerAddress("10.12.16.136", 29017),
new ServerAddress("10.12.16.136", 29018),
new ServerAddress("10.12.16.136", 29019)));
//I just want to write and ignore any database errors. (This does not work)
mongoClient.setWriteConcern(WriteConcern.UNACKNOWLEDGED);
//Get database and collection
MongoDatabase database = mongoClient.getDatabase("test");
MongoCollection<Document> collection = database.getCollection("realtime");
//This does not work too.
collection.withWriteConcern(WriteConcern.UNACKNOWLEDGED);
//Make a simple object to insert. I already have a document with the same _id in the database and I don't want to see the exception via the WriteConcern operation.
Document doc = Document("longitude", longitude)
.append("latitude", latitude)
.append("velocity", velocity)
.append("soc", soc)
.append("_id", 12345678);
//WriteConcern.UNACKNOWLEDGED doesn't work. An exception will be raised.
collection.insertOne(doc);
Wie kann ich das Richtige tun?
Sie haben nicht den ganzen Code richtig gelesen. Hatte auch diese Zeile vor allem 'mongoClient.setWriteConcern (WriteConcern.UNACKNOWLEDGED)'. Sie haben also einen "globalen Effekt" erwartet. Die Einstellungen für die Sammlung sind nur eine Frage der Konsequenz. –
@BlakesSeven bearbeitete Antwort –
Es wäre wahrscheinlich einfacher gewesen, einfach zu sagen: '.withWriteConcern (WriteConcern.UNACKNOWLEDGED)' an das Ende von '.getDatabase()' oder '.getCollection()', wo die beabsichtigten Bedenken sollte benutzt werden. Im Allgemeinen ist "UNACKNOWLEDGED" ziemlich "rohe Gewalt" und sollte nur verwendet werden, wenn Sie wirklich wissen, was Sie tun.Sicherlich nicht "nur" um doppelte Fehler zu vermeiden, da es weit bessere, "sicherere" und weniger aufdringliche Methoden gibt, dies zu tun. Denken Sie daran, dass das OP hier eindeutig nicht der Experte ist. –