4

我仍在尝试了解mongodb如何映射最佳实体。例如:实体用户和实体地址。可能会one-to-many有人来自jpa背景。在 mongo 我不想使用dbref. 所以地址Set在用户的集合中。

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

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

问题2:查询用户地址的最佳方法是什么。一开始有可能吗?因为现在我查询得到Userby usernameorId然后得到用户的地址。我可以直接查询sub-document吗?如果是,如何使用spring-data-mongoCriteria Query 完成:

@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 回答 1

4

问题 1:不,@Document完全没有必要。如果您为文档类激活类路径扫描,我们只会在应用程序启动时利用它。如果您不这样做,则将在第一次持久性操作时完成持久性元数据扫描。然后我们遍历域对象的属性,所以Address会被发现。

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

于 2012-11-26T13:31:41.320 回答