【发布时间】:2017-09-16 12:44:42
【问题描述】:
假设我有以下收藏
public @Data class Customer {
@Id
private String id;
private String firstName;
private String lastName;
@DBRef
private List<Address> addressList= new ArrayList<Address>();
}
和
public @Data class Address {
@Id
private String id;
private String address;
private String type;
private String customerID;
}
而且每个客户都有多个地址,我实现了MongoRepository。第一次保存客户工作得很好customerRepo.save(customerObject),在调用保存之前,我坚持多个地址对象,然后将它们设置为addressList。
下次当我更新同一个文档并想要将一组新地址添加到现有列表时,它会覆盖整个 addressList 数组。所以基本上我现在必须做的是设置像 thisexistingCustomerObject.getAddressList().addAll(my new List of address) 这样的新地址,如果有数千个(或超过一千个)元素,或者我正在对 addressList 数组进行切片,那么下面的过程将不是一个好主意。我的问题是实现这种情况的最佳方法是什么?说如果我不想使用MongoTemplate。是否可以只使用MongoRepository
【问题讨论】:
-
我认为仅使用 MongoRepositoy 是不可能的。您必须使用 mongotemplate 并执行 $pull
-
因为我已经将@DBRef 添加到子条目中,即使使用 MongoRepositoy 也不能解决我的问题,因为我想防止同时加载所有子条目。
标签: spring mongodb mongodb-query spring-data spring-data-mongodb