[英]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.