【问题标题】:Remove a reference field from a mongodb document in a spring boot application从 Spring Boot 应用程序中的 mongodb 文档中删除引用字段
【发布时间】:2020-12-09 09:52:59
【问题描述】:

我在 mongodb 数据库图集中有带有 Spring Boot 应用程序的文档(如下所示)。当我删除下面显示的文档所引用的文档(卖方)时,卖方参考字段也不会被删除,从而使卖方字段引用不存在的文档。

_id: "Q8rWjRVCx4Avu3lvp0D6OuExac23SD"
editable: true
totalAmount: 0
amountPaid: 0
seller: DBRef(employees, BR1pKUGjZU8xdqIlaNvtO9VhqPqmi8, undefined)
_class: com.examle.Transaction

如何使用 spring boot 操作从文档中删除引用的字段(seller)。我知道可以使用 $unset 运算符,但是,这是一个特定于 mongodb 的命令,而我想从我的 spring boot 应用程序中执行此操作。这与解决原始数据类型的question 不同,而我的问题是关于引用。

【问题讨论】:

标签: java spring mongodb spring-boot mongodb-atlas


【解决方案1】:

两种可能的解决方案:

  1. 即使引用的 seller 文档已被删除,文档也应保持原样。 Mongodb 清除指向不存在文档的引用。以我的经验,当您对文档执行操作时会发生这种情况,例如更新或查询操作。而且,即使在引用被清除之前查询数据库,返回也是空的,而不是空值。

  2. 第二种选择是使用 $unset 操作符,如下所示。

    query.addCriteria(Criteria.where("seller").is(<seller id>));
    Update update = new Update();
    update.unset("seller");
    mongoTemplate.updateMulti(query, update, Transaction.class);
    
    

注意在查询中使用卖家 ID 来表示引用的值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-21
    • 1970-01-01
    • 1970-01-01
    • 2018-11-05
    • 2020-03-01
    • 1970-01-01
    • 2011-10-14
    相关资源
    最近更新 更多