MongoDB一对多和多对一关系

Ale*_*lex 0 java mongodb spring-data spring-data-mongodb spring-boot

我正在尝试优化我的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
}
Run Code Online (Sandbox Code Playgroud)

看起来很简单。获取文章,然后获取本文的所有评论。但是,如果我已经有文章ID,并且只想获取文章的所有注释该怎么办?当然也很简单。每个评论都应引用其所属的文章(例如article_id)。

我的问题是如何自动执行?保存/更新等时如何在评论中插入article_id?还是我应该将字段添加到Comment类,然后首先保存文章,然后获取article_id,然后获取评论,添加article_id,保存评论并向文章评论集合添加评论?这对我来说毫无意义。

我正在使用带有Spring Boot 2.0.5的Java 10,其中包括spring-data-mongodb和反应驱动程序。我还实现了@CascadeSave批注,用于在保存文章时保存评论。

多谢您的回覆。

Nis*_*waz 6

您设计的架构是基于关系的设计。在Mongo中,应尽可能避免引用,因为在用例中,您可以在文章中嵌入评论列表。要在文章中保存评论,您可以使用的$push功能spring-data-mongo