2017-02-20 7 views
0

以前のquestionと同様に、Spring RESTを使用してMongoDBのデータにアクセスしようとしています。REST、Springを介してMongoDBのネストされたデータにアクセスする

私は単純なKey-Value Pairsのコレクションを持っており、それらの細かいものにアクセスできます。

{ 
    "_id" : ObjectId("5874ab4a19b38fb91fbb234f"), 
    "roID" : "7ed3f9a6-bb9b-4d16-8d1a-001b7ec40b51", 
    "Name" : "[REDACTED]" 
} 

問題は、これらのオブジェクトは、このような、それらの間の性質との関係を、表示する別のコレクションで使用されている。

{ 
    "_id" : ObjectId("5874ab4f19b38fb91fbb6180"), 
    "[OBJECT CATEGORY A]" : { 
     "_id" : ObjectId("5874ab4a19b38fb91fbb257b"), 
     "roID" : "72f8a8b5-71a7-40ac-b1ac-1ffc98a507ba", 
     "Name" : "[REDACTED]" 
    }, 
    "[OBJECT CATEGORY B]" : { 
     "_id" : ObjectId("5874ab4b19b38fb91fbb32a3"), 
     "roID" : "919446ab-1898-419f-a704-e8c34985f945", 
     "Name" : "[REDACTED]" 
    }, 
    "[RELATIONSHIP INFORMATION]" : [ 
     { 
      "[PROPERTY A]" : [ 
       { 
        "[VALUE A]" : 5.0 
       }, 
       { 
        "[VALUE B]" : 0.0 
       } 
      ] 
     }, 

プロパティは、どこかに8と20

の間でありますJavaの最初の(平らな)オブジェクトの定義は次のようになります:

@Document(collection="OBJ") 
public class Obj { 

    public Obj(){}; 

    @Id 
    public String id; 

    @Field("roID") 
    public String roID; 

    @Field("Name") 
    public String name; 

} 

リポジトリクラス:

@RepositoryRestResource(collectionResourceRel = "OBJ", path = "OBJ") 
public interface ObjRepo extends MongoRepository<Obj, String> { 

    List<Obj> findByName(@Param("name") String name); 
} 

質問:ネストされたオブジェクトにアクセスするにはどうすればよいですか?私は複雑なコレクションのStringsの代わりにLinkedHashMapを使用しようとしましたが、カールはそれらにアクセスしようとすると "null"しか返しません。私はクラスを定義しようとしました

public class BITS { 
    @Id 
    private String _id; 
    @Field("roID") 
    private String roID; 
    @Field("Name") 
    private String name; 

    public BITS(){} 

    public BITS(String _id,String roID, String name){ 
     this._id = _id; 
     this.roID = roID; 
     this.name = name; 
    } 

} 

これらのオブジェクトにアクセスするには失敗しました。

答えて

0

クラスのアプローチが正しいことを示しています。うまく実行されません。 私はテスト目的のために、プレーンJSONコレクションを作成しました:

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

    @Id 
    public String id; 

    @Field("squares") 
    public Square square; 

    @Field("dots") 
    public Dot dot; 

    public JSON(){}; 
    public JSON(String id, Square square,Dot dot){ 
     this.id = id; 
     this.square = square; 
     this.dot = dot; 
    }; 


} 

Square.java

public class Square { 

    private String id; 
    private int x; 
    private int y; 

    public Square(){}; 

    public Square(String id,int x, int y){ 
     this.id = id; 
     this.x = x; 
     this.y = y; 
    }; 

    public Map<String, Integer> getSquare() 
    { 
    Map<String, Integer> res = new HashMap<>(); 
    res.put("x", x); 
    res.put("y", y); 
    return res; 
} 

} 

だからそれだけで所望の応答を改造についてです(ドットは単なるテストのために、同じです)正確には、すでにデータベース内のその形式になっていますが。 もし誰かが私が応答からうんざりを取り除くことができる場所を指すことができたら、それはうまくいくでしょう。現在、次のようになっています。

"_embedded" : { 
    "JSON" : [ { 
     "square" : null, 
     "dot" : { 
     "dot" : { 
      "x" : 4, 
      "y" : 3 
     } 
     }, 
     "_links" : { 
     "self" : { 
      "href" : "http://localhost:8080/JSON/58ac466160fb39e5e8dc8b70" 
     }, 
     "jSON" : { 
      "href" : "http://localhost:8080/JSON/58ac466160fb39e5e8dc8b70" 
     } 
     } 
    }, { 
     "square" : { 
     "square" : { 
      "x" : 12, 
      "y" : 2 
     } 
     }, 
     "dot" : null, 
     "_links" : { 
     "self" : { 
      "href" : "http://localhost:8080/JSON/58ac468060fb39e5e8dc8b7e" 
     }, 
     "jSON" : { 
      "href" : "http://localhost:8080/JSON/58ac468060fb39e5e8dc8b7e" 
     } 
     } 
    } ] 
    }, 
    "_links" : { 
    "self" : { 
     "href" : "http://localhost:8080/JSON" 
    }, 
    "profile" : { 
     "href" : "http://localhost:8080/profile/JSON" 
    } 
    }, 
    "page" : { 
    "size" : 20, 
    "totalElements" : 2, 
    "totalPages" : 1, 
    "number" : 0 
    } 
} 
関連する問題