MongoDB отношения один-ко-многим и многие-к-одному - PullRequest
0 голосов
/ 16 октября 2018

Я пытаюсь оптимизировать свои коллекции MongoDB.Вот пример:

@Document
class Article {
    @Id
    private String id;
    @DBRef(lazy = true)
    @CascadeSave
    private List<Comment> comments;
    private String title;
    private String text;

    // constructors, getters and setters are ommited
}

@Document
class Comment {

    @Id
    private String id;
    private String text;
    private String author;

    // constructors, getters and setters are ommited
}

Выглядит довольно просто.Получить статью, а затем получить все комментарии к этой статье.Но что, если у меня уже есть идентификатор статьи, и я просто хочу получить все комментарии к моей статье?Конечно, это тоже просто.Каждый комментарий должен содержать ссылку на статью, к которой он относится (например, article_id).

Мой вопрос: как я могу сделать это автоматически?Как вставить article_id в комментарий при сохранении / обновлении и т. Д.?Или я должен добавить поле в класс Comment и затем сначала сохранить статью, затем получить article_id, затем получить комментарии, добавить article_id, сохранить комментарии и добавить комментарии в коллекцию комментариев к статье?Это не имеет смысла для меня.

Я использую Java 10 с Spring Boot 2.0.5, включая spring-data-mongodb и реактивный драйвер.Я также реализовал аннотацию @CascadeSave для сохранения комментариев при сохранении статьи.

Спасибо за ваши ответы.

1 Ответ

0 голосов
/ 22 октября 2018

Разработанная вами схема основана на реляционном дизайне.В Mongo вы должны избегать ссылок, если это возможно, так как в вашем случае вы можете встроить список комментариев к статье.Для сохранения комментария в статье вы можете использовать функцию $push, также доступную в spring-data-mongo.

...