问题描述
我在带有Spring Boot应用程序的mongodb数据库地图集中有以下文档(如下所示)。当我删除下面显示的文档所引用的文档(卖方)时,卖方参考字段也不会被删除,从而使卖方字段引用了不存在的文档。
_id: "Q8rWjRVCx4Avu3lvp0D6OuExac23SD"
editable: true
totalAmount: 0
amountPaid: 0
seller: DBRef(employees,BR1pKUGjZU8xdqIlaNvtO9VhqPqmi8,undefined)
_class: com.examle.Transaction
如何通过使用Spring Boot操作将引用的字段(卖方)从文档中删除。我有一个可以使用$unset运算符的想法,但是,这是mongodb特定的命令,而我想从我的spring boot应用程序中执行此操作。这与解决原始数据类型的question相比有所不同,而我的问题是关于引用。
解决方法
两种可能的解决方案:
-
即使删除引用的卖方文档,也照原样保留文档。 Mongodb清除指向不存在文档的引用。以我的经验,这是在您对文档执行操作(例如更新或查询操作)时发生的。而且,即使您在清除引用之前查询数据库,返回的也是空值,而不是空值。
-
第二个选项是使用 $ unset 运算符,如下所示。
query.addCriteria(Criteria.where("seller").is(<seller id>)); Update update = new Update(); update.unset("seller"); mongoTemplate.updateMulti(query,update,Transaction.class);
请注意使用卖方ID来表示查询中参考的值。