在我的基于MongoDB 3.2的应用程序中,我想执行文档处理。为了避免对同一文档的重复处理,我想更新其标志并在数据库中更新该文档。
可能的方法是:
FindIterable<Document> documents = db.collection.find(query);
。documents
,更新每个文档并将其存储在新的集合中。db.collection.updateMany();
将新集合推送到数据库。从理论上讲,这种方法应该有效,但我不确定它是最佳方案。
我的问题: MongoDB Java API中是否有任何方法可以执行以下两个操作:
比上面提出的方法更优雅的方式?
您可以使用update在适当的位置更新文档:
db.collection.update(
{query},
{update},
{multi:true}
);
它将迭代集合中与query
和update
中指定的更新字段匹配的所有文档。
编辑:
要将某些业务逻辑应用于单个文档,您可以按以下方式迭代匹配的文档:
db.collection.find({query}).forEach(
function (doc) {
// your logic business
if (doc.question == "Great Question of Life") {
doc.answer = 42;
}
db.collection.save(doc);
}
)