2017-04-19 13 views
0

私はspring jdbcとmongoDBを使用しています。私は次のような書類を持っています。 1は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"というオブジェクトがあり、それは何を表していますか?データモデルを変更できない場合は、jsonオブジェクトまたはlinkedtreemapsとしてロードするだけです。 –

+0

以下の答えが有用かどうか疑問に思っていますか? – notionquest

+0

@ p.streef数値は分/秒を表します。返信ありがとうございます –

答えて

0

データ構造は非従来型です。通常は、MongoDBがサポートしていますが、キー属性はあまり動的ではありません。複雑な集約クエリを複数のパイプラインで記述しようとすると、複雑になることがあります。

とにかく、上記の構造では、ドキュメントモデルを定義する複数の方法があります。私は単純なJavaクラス(MapおよびString)を使用して以下のソリューションを提供しました。

シンプルなマップ構造を使用する理由のほとんどは、ライブラリのほとんどがシリアライゼーションプロセスをサポートしており、Java 8のラムダ関数を使用して値を繰り返し取得できます。

Documentクラス: -

@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()); 
関連する問題