[英]Fetch data from mongo db in spring boot application where collection name & fields to fetch are known at runtime
我需要创建一个 spring 引导批处理作业,在其中,我需要从 mongoDB 获取数据,其中我没有关于在编码时获取的集合名称和字段的信息。 我仅在批处理开始时才获得此信息。 例如,当批处理开始时,我可以读取属性文件,其中我通过 1 个属性获取集合名称,另一个属性提供要获取的字段列表,第三个字段提供查询的标准/条件因此,我不能定义 Java POJO有集合映射,否则我无法创建任何 MongoRepository\Template(集合名称在运行时已知)。
我想知道的是,就像普通的老原生 SQL 一样,如果我知道字段名和表名,可以即时构建 SQL 并可以触发获取数据:
String dynamicQuery = "SELECT " + commaSeperatedFieldsList + " FROM " + tableName + " WHERE " + criteria;
有什么方法可以在 spring boot + mongo DB 中实现相同的目标?
您可以为此使用MongoTemplate
,因为 spring 会自动为您提供和配置它。
它有一个
find(Query query, Class<T> entityClass, String collectionName)
该方法允许您定义自定义集合名称和自定义实体类。
对于动态查询,如果要限制返回的字段,请使用BasicQuery
作为Query
impl 传递原始 mongo json 查询和字段/投影作为 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
的stream()
方法,因为这不会一次将所有文档加载到 memory 中,您可以在执行过程中一一处理。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.