MongoDB 集合:将 X 保存在 Y 中,同时将 Y 保存在 X 中是否多余(或不良做法)?
MongoDB Collections: Is it redundant (or bad practice) to save X in Y, but also Y in X?
An author has multiple articles. An article has always exactly one
author.
我如何在 mongodb 中设计它?
首先 我想我可以将 'article' 作为子文档嵌入到 'authors' 中。但由于我需要经常获取所有作者的所有文章,我认为这可能不是最好的解决方案。
现在 我认为有两个单独的集合可能会更好:'authors' 和'articles'。一个作者会有多篇文章。所以作者模式会这样:
const authorSchema = new Schema({
email: { type: String, unique: true, lowercase: true},
password: String,
fname: String,
lname: String,
articles: [{
type: Schema.Types.ObjectId,
ref: "article"
}]
})
每篇文章只有一位作者。所以它看起来像:
const articleSchema = new Schema({
title: { type:String, unique: true },
sentences: Array,
image: String,
tags: Array,
word_count: Number,
author: {
type: Schema.Types.ObjectId,
ref: "author"
}
})
问题是:这有效吗?我会 运行 遇到这种设置的问题吗?
我担心在 author
中保存多篇文章以及 在每个 article
中保存 author
是要避免的冗余,或者至少不被认为是非常好的做法。
第一个想法:你是对的,在许多情况下,这不是设计模式的方式。尽管这里已经权衡了何时将某些东西分离到一个新集合中,并且它通常取决于您已经指出的访问模式以及集合所处关系的性质。
对于你的情况,我认为文章和作者的单独集合是最合理的选择。
对于你现在的问题,你想的最多的versatile/general方法就是实现它。考虑在文章模式中遗漏作者引用的情况:如果你现在想知道一篇特定文章的作者,你会浪费大量资源来搜索所有作者并检查他们是否是该文章的作者,而不是只需按照文章中的参考文献即可。
另一点是存储一些引用不会占用太多内存,所以考虑到今天的内存成本,这不应该是一个分手点...
最接近问题:但是请记住,访问数据库的程序需要维护数据库中关系的双方,例如 mongodb,这会使程序稍微复杂一些。
总而言之,您不必担心将引用存储在两个集合中是一种不好的做法,这样做甚至可以加快某些访问模式的速度。
An author has multiple articles. An article has always exactly one author.
我如何在 mongodb 中设计它?
首先 我想我可以将 'article' 作为子文档嵌入到 'authors' 中。但由于我需要经常获取所有作者的所有文章,我认为这可能不是最好的解决方案。
现在 我认为有两个单独的集合可能会更好:'authors' 和'articles'。一个作者会有多篇文章。所以作者模式会这样:
const authorSchema = new Schema({
email: { type: String, unique: true, lowercase: true},
password: String,
fname: String,
lname: String,
articles: [{
type: Schema.Types.ObjectId,
ref: "article"
}]
})
每篇文章只有一位作者。所以它看起来像:
const articleSchema = new Schema({
title: { type:String, unique: true },
sentences: Array,
image: String,
tags: Array,
word_count: Number,
author: {
type: Schema.Types.ObjectId,
ref: "author"
}
})
问题是:这有效吗?我会 运行 遇到这种设置的问题吗?
我担心在 author
中保存多篇文章以及 在每个 article
中保存 author
是要避免的冗余,或者至少不被认为是非常好的做法。
第一个想法:你是对的,在许多情况下,这不是设计模式的方式。尽管这里已经权衡了何时将某些东西分离到一个新集合中,并且它通常取决于您已经指出的访问模式以及集合所处关系的性质。
对于你的情况,我认为文章和作者的单独集合是最合理的选择。
对于你现在的问题,你想的最多的versatile/general方法就是实现它。考虑在文章模式中遗漏作者引用的情况:如果你现在想知道一篇特定文章的作者,你会浪费大量资源来搜索所有作者并检查他们是否是该文章的作者,而不是只需按照文章中的参考文献即可。
另一点是存储一些引用不会占用太多内存,所以考虑到今天的内存成本,这不应该是一个分手点...
最接近问题:但是请记住,访问数据库的程序需要维护数据库中关系的双方,例如 mongodb,这会使程序稍微复杂一些。
总而言之,您不必担心将引用存储在两个集合中是一种不好的做法,这样做甚至可以加快某些访问模式的速度。