2015-10-29 154 views
11

我试图一次更新单个MongoDB文档中的多个字段,但只更新一个字段。 我有一个集合用户,其中用户由customer_user_id唯一定义。我想更新某个用户的birth_year国家字段。Java + MongoDB:更新文档中的多个字段

这是我在做什么:

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

遗憾的是,只有国家字段更新,和登录updateQuery看起来是这样的:

更新查询:{“$集“:{”country“:”Austria“}}

回答

12

我无法验证,但也许你应该尝试:

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

或这是很相同,我认为:

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

@wawek,我想你的文档的领域的做法,并没有没有更新。我用'_id'查询文件,它存在并试图推送特定字段的更新,但没有任何反应。 代码:'BasicDBObject searchQry = new BasicDBObject(“_ id”,epID); BasicDBObject updateFields = new 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

MongoDB的3.4可以使用

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

是的..这是新的方法。 – FaithReaper

相关问题