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

标签 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;
}

而且每个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/

相关文章:

Mongodb - Mongoose ,通过对两个字段求和进行排序

database - 小于嵌入式文档 (mongoDB)

java - 分阶段加载 spring 上下文

java - 如何捕获 SOAP web 服务方法中的任何异常?

javascript - mongodb查询: getting N results with a filter on a field

javascript - 如何设置 req.session 属性

java - 在 Spring 中更新属性文件中的数据库设置

java - SpringMVC 模型属性在发布时返回 null

node.js - mongodb 原生的 promise

mongoDB - 基于返回结果数量的不同查询条件