关于mongodb子文档和spring-data-mongo查询的问题

时间:2012-11-26 11:13:16

标签: mongodb mapping spring-data spring-data-mongodb

我仍然试图抓住mongodb以及如何映射最佳实体。例如:实体用户和实体地址。当某人来自one-to-many背景时,可能会jpa。在mongo中我不想使用dbref。因此,地址位于用户的Set集合中。

假设我正在使用spring-data-mongo

问题1 :用户和地址都应该有@Document注释?还是只有用户?

问题2 :查询用户地址的最佳方法是什么。有可能在第一时间?因为现在我通过Userusername查询Id,然后获取用户的地址。我可以直接查询sub-document吗?如果是,如何使用spring-data-mongo条件查询完成:

@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;
   ...

}

1 个答案:

答案 0 :(得分:4)

问题1:不,@Document根本不是必需的。如果激活文档类的类路径扫描,我们只是在应用程序启动时利用它。如果不这样做,将在第一个持久性操作上完成持久性元数据扫描。然后我们遍历域对象的属性,因此将发现Address

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