MongoDB一对多和多对一关系

时间:2018-10-16 12:19:18

标签: java mongodb spring-boot spring-data spring-data-mongodb

我正在尝试优化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
}

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

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

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

感谢您的答复。

1 个答案:

答案 0 :(得分:6)

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