2015-10-29 10 views
11

Ich versuche, mehrere Felder in einem MongoDB-Dokument zu aktualisieren, aber nur ein Feld wird aktualisiert. Ich habe eine Sammlung Benutzer, in denen Benutzer eindeutig durch eine customer_user_id definiert sind. Ich möchte einen bestimmten Benutzer birth_year und Land Felder aktualisieren.Java + MongoDB: Aktualisieren mehrerer Felder in einem Dokument

Das ist, was ich tue:

// Define the search query: 
DBCollection col = md.getDb().getCollection("user"); 
BasicDBObject searchQuery = new BasicDBObject("customer_user_id", customer_user_id); 

// Define the update query: 
BasicDBObject updateQuery = new BasicDBObject(); 
updateQuery.append("$set", new BasicDBObject().append("birth_year", birth_year); 
updateQuery.append("$set", new BasicDBObject().append("country", country); 

log.info("Update query: " + updateQuery); 
col.update(searchQuery, updateQuery); 

Leider nur das Land Feld aktualisiert wird, und der protokollierte updateQuery sieht wie folgt aus:

Update-Abfrage: { „$ set ": {" land ":" Österreich "}}

Antwort

12

Ich kann das nicht überprüfen, aber vielleicht sollten Sie versuchen:

BasicDBObject updateFields = new BasicDBObject(); 
updateFields.append("birth_year", birth_year); 
updateFields.append("country", country); 
BasicDBObject setQuery = new BasicDBObject(); 
setQuery.append("$set", updateFields); 
col.update(searchQuery, setQuery); 

oder das ist ziemlich das gleiche denke ich:

updateQuery.put("$set", new BasicDBObject("country",country).append("birth_year", birth_year)); 
+0

@wawek verwenden können, ich bin Ihr Ansatz und keines des Dokuments Feld versuchen wird nicht aktualisiert. Ich frage die Dokumente nach '_id' ab, die existieren und versuchen, eine Aktualisierung der spezifischen Felder durchzuführen, aber nichts passiert. Code: 'BasicDBObject searchQry = new BasicDBObject (" _ id ", epID); BasicDBObject updateFields = neu BasicDBObject(); updateFields.append ("isExpired", true); updateFields.append ("fetchStatus", FetchStatus.FETCHED.getID()); BasicDBObject setQuery = new BasicDBObject(); setQuery.append ("$ set", updateFields); UpdateResult updRes = dbC_Episodes.updateOne (searchQry, setQuery); ' –

1

Für MongoDB 3.4 Sie

MongoCollection<Document> collection = database.getCollection(nameOfCollection); 
Bson filter = new Document("SearchKey", Value); 
Bson newValue = new Document("UpdateKey1", "Value1").append("UpdateKey2", "Value2")....;  
Bson updateOperationDocument = new Document("$set", newValue); 
collection.updateMany(filter, updateOperationDocument); 
+0

Ja .. das ist der neue Weg. – FaithReaper

Verwandte Themen