2017-02-20 5 views
0

С учетом моего более раннего question, я пытаюсь получить доступ к данным в MongoDB с помощью Spring REST.Доступ к вложенным данным в MongoDB через REST, Spring

У меня есть коллекции простых пар ключей и доступны для них.

{ 
    "_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); 
} 

Вопрос: как я могу получить доступ к вложенным объектам? Я попытался использовать LinkedHashMap вместо строк для сложной коллекции, curl возвращает только «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; 
} 

} 

(Dot то же самое, только для тестирования) Так что это как раз о ремоделирования желаемого ответа точно, несмотря на то, что он уже находится в этом формате в базе данных. Если кто-нибудь может указать мне, где я могу удалить беспорядок из ответа tho, это было бы хорошо. В настоящее время выглядит так:

"_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 
    } 
} 
Смежные вопросы