在Spring Boot应用程序中从mongo db获取数据,在运行时已知要获取的集合名称和字段

我需要创建一个Spring Boot批处理作业,其中,我需要从mongoDB中获取数据,而我没有关于要在编码时获取的集合名称和字段的信息。仅在批处理开始时才获得此信息。 例如。批处理开始时,我可以读取属性文件,其中通过1个属性获取集合名称,另一个属性提供要获取的字段列表,第三个属性提供查询的条件/条件 因此,由于这个原因,我无法定义一个Java POJO来定义要映射的集合,也无法创建任何MongoRepository \ Template(集合名称在运行时是已知的)。

我想知道的是,就像普通的本机SQL一样,如果我立即了解字段名和表名,则可以构建SQL并可以触发它来获取数据:

String dynamicQuery = "SELECT " + commaSeperatedFieldsList + " FROM " + tableName + " WHERE " + criteria;

在Spring Boot + mongo DB中,有什么方法可以实现相同的目的吗?

jayoyhjay 回答:在Spring Boot应用程序中从mongo db获取数据,在运行时已知要获取的集合名称和字段

您可以为此使用MongoTemplate,因为spring会自动为您配置并对其进行自动接线。

它有一个

find(Query query,Class<T> entityClass,String collectionName)

使您可以定义自定义集合名称和自定义实体类的方法。

对于动态查询,如果要限制返回的字段,请使用BasicQuery作为Query impl传递原始的mongo json查询,并将fields / projection作为json传递。

org.bson.Document用作entityClass,它基本上是Map的实现,可让您以动态方式遍历字段。

mongoTemplate.find(new BasicQuery("{ name: \"mongodb\"}","{ name: 1}"),Document.class,"your-collection-name").forEach(x -> {
    x.get("name"); // access a specific field

    x.forEach((key,value) -> {
        // iterate over all fields
    });
});

当处理较大的结果时,请考虑使用MongoTemplate的{​​{1}}方法,因为这种方法不会一次将所有文档都加载到内存中,因此您可以在执行过程中通过以下方式对其进行处理:一个。

本文链接:https://www.f2er.com/2519987.html

大家都在问