Spring数据mongo批量更新

时间:2016-11-17 03:48:03

标签: mongotemplate

来自1.9.0.RELEASE的spring-data-mongodb支持批量更新。

BulkOperations ops = template.bulkOps(BulkMode.UNORDERED, Match.class);
for (User user : users) {
    Update update = new Update();
    ...
    ops.updateOne(query(where("id").is(user.getId())), update);
}
ops.execute();

mongoTemplate具有名为void save(Object objectToSave)的函数;我想插入/更新整个记录,但不是某些特定字段。是否有任何方法或功能可以使Update类无效?

也许是这样的......?

BulkOperations ops = template.bulkOps(BulkMode.UNORDERED, Match.class);
for (User user : users) {
    ...
    ops.save(query(where("id").is(user.getId())), user);
}
ops.execute();

4 个答案:

答案 0 :(得分:2)

在Spring Data MongoDB批量操作中似乎不支持 upsert(查询查询,对象对象)

但是我们可以使用 Update.fromDBObject 方法从 DBObject 生成更新对象:

import 'dropdown-group/style.css'
import dropdown_group from 'dropdown-group'
export dropdown_group

答案 1 :(得分:2)

你可以试试这个:

BulkOperations ops = mongoOps.bulkOps(BulkMode.<ordered/unordered>,<your ob>.class);
loop on your batch {
    Update update = Update.fromDBObject(
        BasicDBObjectBuilder.start("$set", <your ob>).get()
    );
    ops.upsert(query(where("").is(<your ob>.something())), update);
}
ops.execute();

这将像保存一样更新整个pojo(不是某些特定字段)。

答案 2 :(得分:0)

删除和插入将是您可以选择的选项,但是如果出现任何故障,您需要在选择此选项之前备份数据。

答案 3 :(得分:0)

org.springframework.data.mongodb.core.MongoTemplate提供BulkWriteOperation的实现。您可以使用它。

BulkWriteOperation bulkWriteOperation= mongoTemplate.getCollection(collectionName).initializeUnorderedBulkOperation();