我在Mongodb中有用户和照片文档.每张照片都属于用户,用户可以共享一张照片.假设用户1有p1、p2、p3照片,用户2有p3、p4、p5照片.如果我删除user1(手动使用Compass等工具),p1和p2也应该被删除,而不是p3.如何实现这一点,我需要定义什么样的数据库 struct ?

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

其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;

}

推荐答案

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

Mongodb相关问答推荐

MongoDB即使在使用索引时也很慢

我无法在react 中使用 fetch 和express 从数据库中删除数据

对对象数组进行分组并在 mongodb 中获取计数

Mongodb 按数组元素聚合组

用Golang减go mongodb中的两个字段

创建索引需要很长时间

删除一对一和一对多引用 - Mongoose

从 PHP 打印 MongoDB 日期

Mongo 无法启动

使用 Spring Boot >= 2.0.1.RELEASE 将 ZonedDateTime 保存到 MongoDB 时出现 CodecConfigurationException

MongoDB 是否重用已删除的空间?

MongoDB $或PHP中的查询

Springboot 使用 find*() 查询时出现 Mongodb 错误

如何在 $lookup Mongodb 的 LocalField 中将字符串转换为 objectId

$elemMatch 的 MongoDB 索引

ZonedDateTime 与 MongoDB

MongoDB 存储 ObjectId 的数组

MongoDB中超过2GB的数据库

MongoDB备份计划

Meteor `Deps.autorun`与`Collection.observe`