Как каскадно удалить документ в mongodb? - PullRequest
0 голосов
/ 03 сентября 2018

У меня есть пользовательские и фотодокументы в Mongodb. Каждая фотография принадлежит пользователю, и фотография может быть передана пользователям. Допустим, у user1 есть фотографии p1, p2, p3, а у user2 - фотографии p3, p4, p5. Если я удаляю user1 (вручную, используя такие инструменты, как Compass), 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;

}

Ответы [ 2 ]

0 голосов
/ 11 сентября 2018

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

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

0 голосов
/ 11 сентября 2018

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...