查询文档,更新文档并将其返回给MongoDB

时间:2016-02-01 22:27:23

标签: mongodb mongodb-query insert-update database

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

可能的方法是:

  1. 查询数据:FindIterable<Document> documents = db.collection.find(query);
  2. 对这些文档执行一些业务逻辑。
  3. 迭代documents,更新每个文档并将其存储在新的集合中。
  4. 使用db.collection.updateMany();将新集合推送到数据库。
  5. 理论上,这种方法应该有效,但我不确定它是最佳方案。

    我的问题:
    MongoDB Java API中是否有任何方法可以执行以下两个操作:

    1. 查询文档(从DB获取它们并传递给单独的方法);
    2. 更新它们,然后将更新后的版本存储在DB中;
    3. 与上述方法相比,是否更优雅?

1 个答案:

答案 0 :(得分:1)

您可以使用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);
    }
)