我试图在一个MongoDB文档中立即更新多个字段,但只更新了一个字段。 我有一个用户集合,其中用户由 customer_user_id 唯一定义。我想更新某个用户的 birth_year 和国家/地区字段。
这就是我在做的事情:
// 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如下所示:
更新查询:{“$ set”:{“country”:“Austria”}}
答案 0 :(得分:13)
我无法验证,但也许你应该尝试:
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));
答案 1 :(得分:5)
对于MongoDB 3.4,您可以使用
df.groupBy('colName').count().toPandas().set_index("count").sort_index(ascending=False)
答案 2 :(得分:3)
或者,com.mongodb.client.model.Updates
中有方便的方法可以做到这一点:
MongoCollection<Document> collection = mongoClient.getDatabase("db").getCollection("user");
collection.updateMany(
Filters.eq("customer_user_id", customer_user_id),
Updates.combine(
Updates.set("birth_year", birth_year),
Updates.set("country", country)
));
在此基础上也会创建一个$set
的Bson查询,但是使用便捷方法可以使您的代码更清晰易读。
答案 3 :(得分:1)
@pakat对答案的不同...
MongoCollection<Document> collection = mongoClient.getDatabase("db").getCollection("user");
List<Bson> updatePredicates = new ArrayList<Bson>();
Bson predicateBirthYear = set("birth_year", birth_year);
Bson predicateCountry = set("country", country);
updatePredicates.add(predicateBirthYear);
updatePredicates.add(predicateCountry);
collection.updateMany(Filters.eq("customer_user_id", customer_user_id), Updates.combine(updatePredicates));