如何在mongodb中级联删除文件?

ace*_*ace 7 mongodb nosql spring-boot

我在Mongodb有用户和照片文件.每张照片属于用户,照片可能在用户之间共享.让我们说user1有p1,p2,p3照片,user2有p3,p4,p5照片.如果我删除user1(手动使用指南针之类的工具),也应该删除p1和p2而不是p3.如何实现这个以及我需要定义什么样的数据库结构?

目前,如果我删除user1,则不会删除任何照片并保留在数据库中,这使得数据库从使用数据库的应用程序的角度来看已损坏.

其Spring Boot应用程序以及用户和照片声明为:

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;

}
Run Code Online (Sandbox Code Playgroud)

Min*_*aft 8

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

  • 请记住,BSON 文档的最大大小为 16 MB (6认同)