我仍然试图抓住mongodb
以及如何映射最佳实体。例如:实体用户和实体地址。当某人来自one-to-many
背景时,可能会jpa
。在mongo中我不想使用dbref
。因此,地址位于用户的Set
集合中。
假设我正在使用spring-data-mongo
:
问题1 :用户和地址都应该有@Document
注释?还是只有用户?
问题2 :查询用户地址的最佳方法是什么。有可能在第一时间?因为现在我通过User
或username
查询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;
...
}
答案 0 :(得分:4)
问题1:不,@Document
根本不是必需的。如果激活文档类的类路径扫描,我们只是在应用程序启动时利用它。如果不这样做,将在第一个持久性操作上完成持久性元数据扫描。然后我们遍历域对象的属性,因此将发现Address
。
问题2:您必须完全阅读User
个对象,因为MongoDB目前不允许返回子文档。因此,您必须查询整个User
文档,但可以使用addresses
对象上的fieldSpec
或存储库抽象来限制返回到Query
字段的字段@Query
注释(请参阅ref docs)。