我发现MongoDB java-driver的文档不足以解决这个问题。
我想根据另一个字段的值(时间戳)使用新字段更新集合中的所有文档。
我应该只查询FindIterable<Document>
,执行.forEach
并使用apply
方法执行操作吗?在那种情况下,这将是什么正确的语法?
这是我到目前为止所拥有的。 Document.put
没有做到这一点。
private void addDayOfWeekField(MongoDatabase mdb, String collectionName){
FindIterable<Document> iterable = mdb.getCollection(collectionName).find();
iterable.forEach(new Block<Document>() {
@Override
public void apply(Document document) {
long timestamp = Long.parseLong(document.get("timestamp").toString())*1000l;
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(timestamp);
document.put("day_of_week", cal.get(Calendar.DAY_OF_WEEK));
document.put("hour_of_day", cal.get(Calendar.HOUR_OF_DAY));
}
});
}
下面的代码使用新字段更新所有文档,但没有值。正如菲利普所说,UpdateOne可能是正确的方式。
mdb.getCollection(collectionName).updateMany(
new Document(),
new Document("$set", new Document("hour_of_day", ""))
);
提前致谢。
答案 0 :(得分:0)
document.put
更改Java VM中文档的本地副本。数据库没有注意到这一点。要将更改发送回数据库,请使用collection.updateOne或collection.replaceOne。