来自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();
答案 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();