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

问题描述 投票:0回答:1

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

可能的方法是:

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

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

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

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

比上面提出的方法更优雅的方式?

mongodb mongodb-query insert-update database
1个回答
1
投票

您可以使用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);
    }
)
© www.soinside.com 2019 - 2024. All rights reserved.