我正在尝试优化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批注,用于在保存文章时保存评论。
感谢您的答复。
答案 0 :(得分:6)
您设计的架构是基于关系的设计。在Mongo中,应尽可能避免引用,因为在用例中,您可以在文章中嵌入评论列表。
要在文章中保存评论,您可以使用在$push
中也可用的 spring-data-mongo
函数。