代码之家  ›  专栏  ›  技术社区  ›  Shail

MongoDb使用Spring数据mongo更新多个具有不同值的文档

  •  0
  • Shail  · 技术社区  · 7 年前

    使用spring数据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);
    

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

    1 回复  |  直到 7 年前
        1
  •  3
  •   s7vr    7 年前

    您可以使用批量写入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();
    }