java - 如何在MongoDB中进行批量操作(类似于Spring中的jdbdTemplate.batchUpdate())?

标签 java mongodb spring-data

jdbcTemplate.batchUpdate("INSERT INTO TABLE_NAME (COL1, COL2, COL3) VALUES (?, ?, ?)", List<Object[]>);

是否有类似的方法可以使用 MongoRepository 进行相同的插入Spring data中的接口(interface)mongodbjava

最佳答案

您可以使用以下方法之一将多个文档插入到集合中。假设一个 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/

相关文章:

java - 如何确定和自动旋转图像?

mongodb - EPEL MongoDB 无法在 EC2 Amazon AMI 上启动

node.js - Mongoose 中嵌套文档的不同类型是什么?

postgresql - 我在使用 Spring Data 在 PostgreSQL 中对数组列进行查询时遇到问题

postgresql - Spring Data JPA JSONB 参数化

java - 将值从 Java 传递给 javascript

java - Jetty 9 和 GzipHandler

java - 如果存在,Java 中的 this() 应该始终首先执行吗?

Spring-boot Couchbase 通过属性抛出 IndexOutOfBoundsException 过滤器

Mongodb Search geolocation with text filters and group by 在单个查询中