jdbcTemplate.batchUpdate("INSERT INTO TABLE_NAME (COL1, COL2, COL3) VALUES (?, ?, ?)", List<Object[]>);
是否有类似的方法可以使用 MongoRepository
进行相同的插入Spring data
中的接口(interface)mongodb
和java
?
最佳答案
您可以使用以下方法之一将多个文档插入到集合中。假设一个 test
集合和一个 Test.java
POJO 代表一个文档:
(i) 使用 MongoRepository
插入和删除:
@Repository
public interface MyRepository extends MongoRepository<Test, String> {
void deleteByIdIn(List<ObjectId> ids);
}
//运行 saveAll
存储库方法:
Test t1 = new Test("apple");
Test t2 = new Test("banana");
Test t3 = new Test("orange");
List<Test> ts = repository.saveAll(Arrays.asList(t1, t2, t3));
从 Mongo Shell 中查找 test
集合中新插入的文档:
> db.test.find()
{ "_id" : ObjectId("5e579153c4d0e55b6ad5f869"), "name" : "apple", "_class" : "com.example.demo.Test" }
{ "_id" : ObjectId("5e579153c4d0e55b6ad5f86a"), "name" : "banana", "_class" : "com.example.demo.Test" }
{ "_id" : ObjectId("5e579153c4d0e55b6ad5f86b"), "name" : "orange", "_class" : "com.example.demo.Test" }
//按 ids 执行删除:
ObjectId o1 = new ObjectId("5e579153c4d0e55b6ad5f869"); // apple
ObjectId o2 = new ObjectId("5e579153c4d0e55b6ad5f86b"); // orange
List<ObjectId> ids = Arrays.asList(o1, o2);
repository.deleteByIdIn(ids);
名称为“apple”和“orange”的对象将被删除。另请注意,Test.java
POJO 类必须定义了 id
字段,以便通过该字段引用和删除。
(ii) 使用 MongoTemplate
:
MongoOperations mongoOps = new MongoTemplate(MongoClients.create(), "test");
BulkOperations bulkOps = mongoOps.bulkOps(BulkOperations.BulkMode.UNORDERED, Test.class);
Test t1 = new Test("orange");
Test t2 = new Test("grape");
bulkOps.insert(Arrays.asList(t1, t2));
BulkWriteResult r = bulkOps.execute();
(iii) POJO Test
类:
public class Test {
private String id;
private String name;
public Test(String name) {
this.name = name;
}
public String getId() {
return this.id;
}
public String getName() {
return this.name;
}
@Override
public String toString() {
return this.name;
}
}
关于java - 如何在MongoDB中进行批量操作(类似于Spring中的jdbdTemplate.batchUpdate())?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60428078/