当前位置: 首页 > 知识库问答 >
问题:

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

邵阳
2023-03-14

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

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个答案

令狐声
2023-03-14

您可以使用批量编写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();
}
 类似资料:
  • 问题内容: 我试图了解如何用不同的值更新多行,但我不明白。解决方案无处不在,但对我来说似乎很难理解。 例如,将三个更新更新为1个查询: 我读了一个例子,但我真的不明白如何进行查询。即: 如果在WHERE和IF条件中存在多个条件,我还不太清楚如何执行查询。 问题答案: 您可以这样操作: 我不了解您的日期格式。日期应使用本机日期和时间类型存储在数据库中。

  • 在我的用例中,我希望使用spring-data-mongo一次更新多个文档,即与查询匹配的文档。 这是我一直在尝试的, MongoDB-3.6 spring-data-mongoDB-1.5.5.release

  • 我在MongoDB中使用Java驱动程序。我有一个集合中的文档id列表。我想在每个文档中更新一个字段,该文档的“\u id”等于列表中的一个文档id。在下面的示例中,我尝试了以下方法: 我的目的是用\u id=123、\u id=456和\u id=789更新文档,将其“field”属性设置为59。 我这样做对吗?

  • exTab 如何使用SQL(与mySQL一起)只返回col1中具有多个相同值、col2中具有多个相同值、但COL3中具有唯一值的行? 例如,在上面的表(exTab)中,val1在col1中出现了4次,对于这4次,val4在col2中出现了3次,但是对于这3次,val7在col3中只出现了一次,所以我想返回这一行(第1行)。考虑到这些条件,第1行将是我希望从此表返回的唯一一行。 我试过和group

  • 问题内容: 我有表SQLite数据库和列,,。行数不断变化(可能增加或减少)。如果我知道每一行的值和行数,是否可以执行一次SQL查询以根据ID更新所有具有不同值的和字段? 例如: SQL查询伪代码: 和是存储和字段的新值的数组。 如果,例如,和包含以下值: …然后查询后的数据库应如下所示: 这可能吗?我现在正在为每个查询更新一行,但是随着行数的增加,它将需要数百个查询。顺便说一下,我正在AIR中做