2015-10-29 17 views
11

Tek bir MongoDB belgesinde birden çok alanı güncelleştirmeyi deniyorum, ancak yalnızca bir alan güncelleştirildi. Kullanıcıların benzersiz bir şekilde customer_user_id tarafından tanımlandığı bir koleksiyon kullanıcı kullanıcım var. Belirli bir kullanıcının birth_year ve ülke alanlarını güncellemek istiyorum. Java + MongoDB: Bir belgedeki birden çok alanı güncelleştirme

Bu

yapıyorum budur:

Maalesef
// 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); 

, sadece ülke alan güncellenir ve kaydedilir updateQuery şuna benzer:

Güncelleme sorgusu: { "$ seti ": {" ülke ":" Avusturya "}}

cevap

12

Bunu doğrulayamıyorum ama belki de denemelisiniz:

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); 

veya bu oldukça aynıdır sanırım:

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

@wawek kullanabilirsiniz, ben belgenin alanının yaklaşımınızı ve hiçbiri çalışıyorum güncellenmedi. Belli alanların bir güncellemesini zorlamak için var olan ve hiçbir şey olmuyorken, '_id' ile belgelerini araştırıyorum. Kod: 'BasicDBObject searchQry = new BasicDBObject (" _ id ", epID); TemelDBObject updateFields = new BasicDBObject(); updateFields.append ("isExpired", true); updateFields.append ("fetchStatus", FetchStatus.FETCHED.getID()); TemelDBObject setQuery = new BasicDBObject(); setQuery.append ("$ set", updateFields); UpdateResult updRes = dbC_Episodes.updateOne (searchQry, setQuery); –

1

MongoDB 3.4 için,

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

Evet .. bu yeni yol. – FaithReaper

İlgili konular