Spring 数据 MongoDB 正在将数组添加到现有文档

Spring data MongoDB adding arrays to an existing document

假设我有以下 Collections

    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),在调用保存之前,我保留了多个地址 Objects,然后将它们设置为 addressList。 下次当我更新同一个文档并想将一组新地址添加到现有列表时,它会覆盖整个 addressList 数组。所以基本上我现在必须做的是像这样设置新地址existingCustomerObject.getAddressList().addAll(my new List of address) 如果有一千个(或超过一千个)元素或者我正在切片 addressList 数组,下面的过程将不是一个好主意。我的问题是实现这种情况的最佳方法是什么?说如果我不想使用 MongoTemplate。是否可以仅使用 MongoRepository

我认为你不能那样做。以前我也有同样的情况,我尝试了以下

1.org.springframework.core.convert.converter.Converter 即使我设法操纵了 DBObject 但像 $push$set(将它们包装在键下)这样的功能在那里不起作用.

2.AbstractMongoEventListener 通过覆盖 onBeforeSave 但在保存期间未发生对象操作。

但是你可以尝试改变上面提到的

你可以尝试覆盖MongoRepository保存方法,如果有人指出正确的方向就更好了。 否则,对于我的场景,我必须创建与 MongoRepository(用于插入和检索 data/document)并行工作的自定义存储库(更新和删除文档),但我认为这是一个丑陋的解决方法。必须有一种更清洁的方法来做到这一点。