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

MongoDb使用Spring Data mongo更新具有不同值的多个文档,mongodb,spring-data-mongodb,Mongodb,Spring Data Mongodb,使用SpringDataMongo驱动程序,我想使用一个查询更新mongodb中的多个文档,这些文档将具有不同的更新值。 我尝试了下面的代码,但是对于匹配查询条件的所有文档,它都具有相同的更新值 List<Criteria> bigCriteria = new ArrayList<Criteria>(); for (MyClass myClass : myClasses){ Criteria criteria = Criteria.where("

使用SpringDataMongo驱动程序,我想使用一个查询更新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);
List bigCriteria=new ArrayList();
用于(MyClass MyClass:MyClass){
Criteria=Criteria.where(“_id”)是(myClass.getId());
添加(标准);
}
//下一行只是一个psedudo代码来解释我在这里打算做什么
查询=;
更新=新更新();
更新。设置(“年龄”:11岁);
updateMulti(查询、更新、用户.class);

是否有方法更新具有不同值的所有文档?

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

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

您的代码是否在执行期间一次发出所有查询?我不想向mongodbIt发出多个查询,但一个查询不可能做到这一点,但您可以对它们进行批处理,正如我为高效更新所示。它一次发出100个查询。您可以使用
BulkOperations bulkOps=mongoOperation.bulkOps(BulkOperations.BulkMode.UNORDERED,collectionname)谢谢你的帮助。计算了collectionsName部分,因此删除了该注释。批量大小有限制吗?任何允许限值或建议值?Np。我将测试不同的限制,看看哪一个是最佳的。Read您的代码在执行期间是否一次发出所有查询?我不想向mongodbIt发出多个查询,但一个查询不可能做到这一点,但您可以对它们进行批处理,正如我为高效更新所示。它一次发出100个查询。您可以使用
BulkOperations bulkOps=mongoOperation.bulkOps(BulkOperations.BulkMode.UNORDERED,collectionname)谢谢你的帮助。计算了collectionsName部分,因此删除了该注释。批量大小有限制吗?任何允许限值或建议值?Np。我将测试不同的限制,看看哪一个是最佳的。阅读