Как каскадировать удаление документа в 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?