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

时间:2017-04-20 04:14:26

标签: spring mongodb mongodb-query spring-data spring-data-mongodb

说我有以下收藏

    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数组。所以基本上我现在要做的就是设置这个existingCustomerObject.getAddressList().addAll(my new List of address)这样的新地址,如果有千元(或者超过千元)的元素,或者我正在切割addressList数组,下面的程序不是一个好主意。我的问题是实现这种情况的最佳方法是什么?说如果我不想使用MongoTemplate。是否可以使用MongoRepository

1 个答案:

答案 0 :(得分:0)

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

1. org.springframework.core.convert.converter.Converter即使我设法操纵了D BObject,但$push$set(将它们包裹在密钥下)等功能在那里无效。< / p>

2. AbstractMongoEventListener通过覆盖onBeforeSave但在保存期间没有进行对象操作。

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

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