gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 08:47:06 24 4
gpt4 key购买 nike

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

我想知道的是,就像普通的旧原生 SQL 一样,如果我知道字段名称和表名称,就可以即时构建并触发 SQL 来获取数据:

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

有什么方法可以在 Spring Boot + mongo DB 中实现同样的效果吗?

最佳答案

您可以使用 MongoTemplate 来实现此目的,它可以像 spring 提供的那样 Autowiring 并自动为您配置。

它有一个

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
});
});

当您处理大量结果时,请考虑使用 MongoTemplatestream() 方法,因为它不会立即将所有文档加载到内存中,并且执行时可以一一处理。

关于java - 在 Spring Boot 应用程序中从 mongo db 获取数据,其中要获取的集合名称和字段在运行时已知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61012311/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com