2017-04-19 132 views
0

我正在使用spring jdbc和mongoDB。我將有如下文件。 一個像MongoDB,Spring JDBC,動態密鑰,映射

{ 
    "_id" : ObjectId("58f49f05c88c8f2cb8061e12"), 
    "temp" : { 
     "27" : { 
      "59" : "5" 
     }, 
     "28":{ 
      "0":"0", 
      "1":"1" 
     } 
    }, 
    "luminosity" : { 
     "27" : { 
      "59" : "3" 
     } 
    }, 
    "identifier" : 753  
} 

和其他可能會像

{ 
    "_id" : ObjectId("58f49f05c88c8f2cb8061e12"), 
    "humidity" : { 
     "27" : { 
      "59" : "5" 
     } 
    }, 
    "identifier" : 753  
} 

所以你怎麼能寫我的映射類此。請幫忙! 我已經寫了類似

@Document(collection = "Data") 
public class Data { 

    private String identifier; 


    /** 
    * @return the identifier 
    */ 
    public String getIdentifier() { 
     return identifier; 
    } 

    /** 
    * @param identifier 
    *   the identifierto set 
    */ 
    public void setIdentifier(String identifier) { 
     this.identifier= identifier; 
    } 


    } 

我怎麼能寫其他領域的映射器?這是動態的

+0

你的數據結構是怪異。爲什麼有一個名爲「27」的對象,它代表什麼?如果你不能改變de datamodel你可以加載它作爲json對象或linkedtreemaps。 –

+0

只是想知道下面的答案是否有幫助? – notionquest

+0

@ p.streef數字表示分鐘/秒。感謝您的回覆 –

回答

0

數據結構是非常規的。通常情況下,儘管MongoDB支持它,但key屬性不應該是非常動態的。當您嘗試使用多個管道編寫複雜的聚合查詢時,它可能會變得複雜。

無論如何,鑑於上述結構,可以有多種方式來定義文檔模型。我使用簡單的Java類(Map和String)提供了下面的解決方案。

使用簡單的Map結構的原因是大多數庫支持序列化過程,Java 8 Lambda函數可用於迭代和獲取值。

文檔類: - 使用lambda

@Document(collection = "weather") 
public class Weather { 

    @Id 
    private String id; 

    private Map<String, Map<String, String>> temp; 

    private Map<String, Map<String, String>> luminosity; 

    private String identifier; 

    public String getId() { 
     return id; 
    } 

    public Map<String, Map<String, String>> getTemp() { 
     return temp; 
    } 

    public Map<String, Map<String, String>> getLuminosity() { 
     return luminosity; 
    } 

    public String getIdentifier() { 
     return identifier; 
    } 

    public void setId(String id) { 
     this.id = id; 
    } 

    public void setTemp(Map<String, Map<String, String>> temp) { 
     this.temp = temp; 
    } 

    public void setLuminosity(Map<String, Map<String, String>> luminosity) { 
     this.luminosity = luminosity; 
    } 

    public void setIdentifier(String identifier) { 
     this.identifier = identifier; 
    } 
} 

示例代碼: -

Weather weather = mongoOperations.findById(id, Weather.class); 

     System.out.println(weather.toString()); 
     weather.getTemp().forEach((k, v) -> { 
      System.out.println("Temp : " + k + "; Values : " + v); 
     }); 
     weather.getLuminosity().forEach((k, v) -> { 
      System.out.println("Temp : " + k + "; Values : " + v); 
     });  
     System.out.println(weather.getIdentifier());