簡體   English   中英

從 spring 啟動應用程序中的 mongo db 獲取數據,其中要獲取的集合名稱和字段在運行時是已知的

[英]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
    });
});

當您處理較大的結果時,請考慮使用MongoTemplatestream()方法,因為這不會一次將所有文檔加載到 memory 中,您可以在執行過程中一一處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM