【问题标题】:MongoDb Update multiple documents with different values using Spring Data mongoMongoDb 使用 Spring Data mongo 更新具有不同值的多个文档
【发布时间】:2018-01-26 22:38:06
【问题描述】:

使用 spring data mongo 驱动程序,我想使用一个查询更新 mongodb 中的多个文档,这些文档将具有不同的更新值。 我尝试了以下代码,但对于所有符合查询条件的文档,它将具有相同的更新值。

List<Criteria> bigCriteria = new ArrayList<Criteria>();

for (MyClass myClass : myClasses){
            Criteria criteria = Criteria.where("_id").is(myClass.getId());
            bigCriteria.add(criteria);
}

//next line is just a psedudo code to explain what I intend to do here
query = <<create an or query using bigCriteria created above>>;

Update update = new Update();
update.set("age":11);

mongoOperation.updateMulti(query, update, User.class);

有没有办法用不同的值更新所有文档?

【问题讨论】:

    标签: mongodb spring-data-mongodb


    【解决方案1】:

    您可以使用 Bulk Write api 将具有不同查询条件的批量文档发送到服务器并更新文档。

    有点像

    int count = 0;
    int batch = 100;
    BulkOperations bulkOps = mongoOperation.bulkOps(BulkOperations.BulkMode.UNORDERED, User.class);
    for (MyClass myClass : myClasses){
        Query query = new Query();
        Criteria criteria = Criteria.where("_id").is(myClass.getId());
        query.addCriteria(criteria);
        Update update = new Update();
        update.set("age", myClass.getAge());
        bulkOps.updateOne(query, update);
        count++;
        if (count == batch) {
            bulkOps.execute();
            count = 0;
        }
    }
    if (count > 0) {
        bulkOps.execute();
    }
    

    【讨论】:

    • 您的代码在执行期间是否一次发出所有查询?我不想向 mongodb 发出多个查询
    • 不可能在一个查询中完成,但您可以像我展示的那样对它们进行批处理以进行有效更新。它一次发出 100 个查询。
    • Np。你可以使用BulkOperations bulkOps = mongoOperation.bulkOps(BulkOperations.BulkMode.UNORDERED, collectionname);
    • 感谢您的帮助。想出了 collectionsName 部分,所以删除了该评论。批量大小有限制吗?任何允许的限制或推荐值?
    • Np。我会用不同的限制进行测试,看看哪个是最佳的。阅读here
    猜你喜欢
    • 1970-01-01
    • 2012-05-18
    • 2016-12-29
    • 2017-02-14
    • 2019-01-18
    • 2014-05-15
    • 1970-01-01
    • 2016-05-15
    • 1970-01-01
    相关资源
    最近更新 更多