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



我需要创建一个spring-boot批处理作业,在该作业中,我需要从mongoDB中获取数据,因为我没有关于集合名称&要在编码时获取的字段。我只有在批处理开始时才能得到这些信息。例如,当批处理开始时,我可以读取属性文件,其中我通过1个属性&另一个属性提供要获取的字段列表,第三个字段提供查询的条件因此,由于这个原因,我不能定义一个Java POJO,它有集合的映射,或者我不能创建任何MongoRepository\Template(集合名称在运行时是已知的(。

我想知道的是,就像普通的老式原生SQL一样,如果我知道字段名称&表名,在运行中,SQL可以构建&可以被激发以获得数据:

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

有没有什么方法可以在springboot+mongodb中实现同样的事情?

您可以为此使用MongoTemplate,它可以自动布线,因为spring会自动为您提供和配置它。

它有一个

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

方法,用于定义自定义集合名称和自定义实体类。

对于动态查询,如果您想限制返回的字段,请使用BasicQuery作为Queryimpl来传递原始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
});
});

当您处理一个大的结果时,考虑使用MongoTemplatestream()方法,因为它不会一次将所有文档加载到内存中,并且您可以在执行过程中逐一处理它。

最新更新