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)并行工作的自定义存储库(更新和删除文档),但我认为这是一个丑陋的解决方法。必须有一种更清洁的方法来做到这一点。
假设我有以下 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)并行工作的自定义存储库(更新和删除文档),但我认为这是一个丑陋的解决方法。必须有一种更清洁的方法来做到这一点。