首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在mongodb中级联删除文档?

如何在mongodb中级联删除文档?
EN

Stack Overflow用户
提问于 2018-09-03 18:54:57
回答 2查看 9K关注 0票数 13

我在Mongodb中有用户文档和照片文档。每张照片都属于用户,并且可以在用户之间共享一张照片。假设user1有p1,p2,p3照片,user2有p3,p4,p5照片。如果我删除user1 (使用诸如指南针之类的工具手动删除),p1和p2也应该被删除,但不能删除p3。如何实现这一点?我需要定义什么样的数据库结构?

目前,如果我删除user1,没有照片被删除并保留在数据库中,从使用数据库的应用程序的角度来看,这会使数据库损坏。

它的Spring Boot应用程序和User和Photo声明为:

代码语言:javascript
运行
复制
import lombok.Builder;
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.DBRef;
import org.springframework.data.mongodb.core.mapping.Document;
@Document
@Data
@Builder
public class User {

    @Id
    private String id;


    @DBRef
    private Set<Photo> photos;


    private String name;
}

@Document
@Data
@Builder
public class Photo {

    @Id
    private String id;


    private String fileName;

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-11 08:04:08

正如m4gic提到的,在他链接的问题(herehere)中,MongoDB不支持级联删除。在您的情况下,您可能应该在User对象中创建一个数组,并将完整的子文档放入该数组中,而不是将它们放在自己的集合中。这样,它们将与父对象一起删除,因为它们是父对象的一部分。

票数 9
EN

Stack Overflow用户

发布于 2018-09-11 13:29:59

到目前为止,MongoDB不支持级联删除。由于您已经将引用照片存储在用户模型中,因此您可以从引用列表中获取照片ids并一起删除这些照片。或者,您可以将照片数组嵌入到user对象中,而不是将照片存储在单独的集合中。

你也可以参考这个链接:What is the recommended equivalent of cascaded delete in MongoDB for N:M relationships?

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52148305

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档