Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database MongoDB集合:在Y中保存X,但在X中也保存Y,这是多余的(或不好的做法)吗?_Database_Mongodb_Nosql_Relationship_Non Relational Database - Fatal编程技术网

Database MongoDB集合:在Y中保存X,但在X中也保存Y,这是多余的(或不好的做法)吗?

Database MongoDB集合:在Y中保存X,但在X中也保存Y,这是多余的(或不好的做法)吗?,database,mongodb,nosql,relationship,non-relational-database,Database,Mongodb,Nosql,Relationship,Non Relational Database,一个作者有多篇文章。一篇文章总是只有一篇 作者 我将如何在mongodb中设计它 首先我想我可以将“文章”作为子文档嵌入到“作者”中。但由于我需要经常获取所有作者的所有文章,我认为这可能不是最好的解决方案 现在我想最好有两个独立的收藏:“作者”和“文章”。一个作者会有多篇文章。因此,作者模式如下所示: const authorSchema = new Schema({ email: { type: String, unique: true, lowercase: true}, passw

一个作者有多篇文章。一篇文章总是只有一篇 作者

我将如何在mongodb中设计它

首先我想我可以将“文章”作为子文档嵌入到“作者”中。但由于我需要经常获取所有作者的所有文章,我认为这可能不是最好的解决方案

现在我想最好有两个独立的收藏:“作者”和“文章”。一个作者会有多篇文章。因此,作者模式如下所示:

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"
  }
})
问题是:这是否有效?这种设置是否会出现问题


我担心在
作者
中保存多篇文章,以及在每篇
文章
中保存
作者
是一种需要避免的冗余,至少不被认为是很好的做法

第一个想法:你是对的,在很多情况下,这不是架构的设计方式。虽然这里已经有了一个折衷方案,即何时将某些内容分离到一个新集合中,这通常取决于您已经指出的访问模式以及集合所处关系的性质

对于你的情况,我认为文章和作者的单独收藏是最合理的选择。

对于您当前的问题,您考虑了实现它的最通用/通用的方法。当你在文章模式中省略了作者的引用时,考虑一下:如果你现在想要一篇特定文章的作者,你浪费了很多资源来搜索所有的作者并检查他们是否是文章的作者,而不是仅仅跟随文章中的引用。 另一点是,存储一些引用不会占用太多内存,所以考虑到当前的内存成本,这不应该是一个中断点

最接近一个问题:但是请记住,访问数据库的程序需要在数据库(如mongodb)中维护关系的双方,这会使程序更加复杂

因此,作为结论,您不应该担心在两个集合中存储引用是一种不好的做法,甚至通常这样做是为了加速某些访问模式