Как каскадировать удаление документа в mongodb?

У меня есть пользовательские и фото документы в Mongodb. Каждая фотография принадлежит пользователю, и фотография может быть разделена между пользователями. Допустим, у user1 есть фотографии p1,p2,p3,а у user2 есть фотографии p3,p4, p5. Если я удаляю user1 (вручную с помощью таких инструментов, как Compass), p1 и p2 также должны быть удалены, но не p3. Как достичь этого и какую структуру базы данных мне нужно определить?

В настоящее время, если я удаляю user1, фотографии не удаляются и остаются в databse, что теперь делает базу данных поврежденной из точка зрения приложения, использующего базу данных.

его приложение 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;

}

2 ответов


Как упоминалось m4gic и в вопросах, которые он связал (здесь и здесь), MongoDB не поддерживает каскадные удаления. В вашей ситуации вы, вероятно, должны создать массив в объекте User и поместить полные дочерние документы в этот массив вместо того, чтобы хранить их в своей собственной коллекции. Таким образом, они будут удалены вместе с родителем, потому что они являются его частью.


MongoDB не поддерживает каскадное удаление на данный момент. Поскольку вы уже храните фотографии ref в пользовательской модели, вы можете получить идентификаторы фотографий из списка ссылок и удалить фотографии вместе. Или вместо хранения фотографий в отдельной коллекции вы можете иметь массив фотографий, встроенных в объект пользователя.

вы также можете обратиться к этой ссылке: каков рекомендуемый эквивалент каскадного удаления в MongoDB для отношений N:M?