2012-11-26 66 views
4

我仍然试图绕过mongodb以及如何映射最佳实体。如果你拿例如:实体用户和实体地址。当有人来自jpa背景时,可能会有one-to-many。这里在蒙戈我不想使用dbref。因此地址位于用户的Set集合中。关于mongodb子文档和spring-data-mongo查询的问题

假如我是使用spring-data-mongo

问题1:既要用户和地址有@Document注解或只是用户?

问题2:什么是查询用户地址的最佳方式。这是可能的第一个地方?因为现在我查询得到UserusernameId然后得到用户的地址。我可以直接查询sub-document

@Document 
public class User{ 
    @Id 
    private Long ID; 
    private String username; 
    private Set<Address> addresses = new HashSet<Address>(); 
    ... 
} 

@Document 
public class Address { 
    @Id 
    private Long ID; 
    private String city; 
    private String line1; 
    ... 

} 

回答

4

问题1:不,@Document并非绝对必要在所有如果是被它采用spring-data-mongo条件查询做如何。如果激活文档类的类路径扫描,我们只是在应用程序启动时利用此功能。如果你不持久性元数据扫描将在第一次持久性操作上完成。然后我们遍历域对象的属性,因此将会发现Address

问题2:您必须完全读取User对象,因为MongoDB目前不允许返回子文档。因此,您必须查询整个User文档,但可以使用Query对象或存储库抽象的@Query注释(请参见ref docs)上的fieldSpec来限制字段返回到addresses字段。