假设我有以下收藏
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;
}
而且每个Customer都有多个地址,我实现了MongoRepository
。第一次保存客户时 customerRepo.save(customerObject)
运行良好,在调用保存之前,我保留了多个地址对象,然后将它们设置为 addressList
。
下次当我更新同一个文档并想将一组新的地址添加到现有列表时,它会覆盖整个 addressList
数组。所以基本上我现在必须做的是像这样设置新地址将 addressList 数组切片后的过程不是一个好主意。我的问题是实现这种情况的最佳方法是什么?假设我不想使用 MongoTemplate
。是否可以只使用 MongoRepository
最佳答案
我不认为你可以那样做。以前我也有同样的情况,我尝试了以下方法
1.org.springframework.core.convert.converter.Converter
即使我已经设法操纵了 DBObject
但功能类似于 $push
或 $set
(将它们包装在键下)在那里不起作用。
2.AbstractMongoEventListener
通过覆盖 onBeforeSave
但在保存期间未发生对象操作。
不过你可以尝试改变上面提到的
你可以尝试覆盖MongoRepository
保存方法,如果有人指出正确的方向会更好。
否则,对于我的场景,我必须创建与 MongoRepository
(用于插入和检索数据/文档)并行工作的自定义存储库(更新和删除文档),但我认为这是一个丑陋的解决方法。必须有一种更清洁的方法来做到这一点。
关于Spring data MongoDB 将数组添加到现有文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43510093/