查询文档,更新它并 return 返回到 MongoDB

Query documents, update it and return it back to MongoDB

在我的 MongoDB 基于 3.2 的应用程序中,我想执行文档处理。为了避免对同一个文档的重复处理我想更新它的标志并更新数据库中的这个文档。

可能的做法是:

  1. 查询数据:FindIterable<Document> documents = db.collection.find(query);.
  2. 对这些文档执行一些业务逻辑。
  3. 遍历 documents,更新每个文档并将其存储在新集合中。
  4. 使用 db.collection.updateMany(); 将新集合推送到数据库。

从理论上讲,这种方法应该可行,但我不确定它是否是最佳方案。

我的问题:
MongoDB Java API 有什么方法可以执行以下两个操作:

  1. 查询文档(从数据库中获取它们并传递给单独的方法);
  2. 更新它们,然后将更新后的版本存储在数据库中;

与上面提出的方法相比,以更优雅的方式?

您可以使用 update 就地更新文档:

db.collection.update(
    {query},
    {update},
    {multi:true}
);

它将遍历集合中匹配 queryupdate 中指定的更新字段的所有文档。

编辑:

要将一些业务逻辑应用于单个文档,您可以按如下方式迭代匹配的文档:

db.collection.find({query}).forEach(
    function (doc) {
        // your logic business
        if (doc.question == "Great Question of Life") {
            doc.answer = 42;
        }
        db.collection.save(doc);
    }
)