创作者:{ type:Schema.ObjectId, ref:'用户' } })
创建者:[UserSchema]
两行代码之间有什么区别。
答案 0 :(得分:0)
(为了让事情更容易解释,我会将creator
属于Blog
)的模型称为
creator: { type: Schema.ObjectId, ref: 'User' } }
这声明了creator
属性,该属性将引用(基本上是ObjectId
)存储到User
文档。它有点像SQL中的外键。
当您对Blog
模型执行查询时,您可以告诉Mongoose使用"population"自动加载引用的文档。这是必要的,因为User
文档存储在一个单独的集合中(在这方面,它们是独立的)。
creator: [UserSchema]
这声明了一个creator
属性,用于存储用户列表。这些用户有自己的Mongoose模式(用于验证),但主要区别在于它们不会存储在单独的集合中;换句话说,每个User
文档只是按原样存储在creator
文档的Blog
数组中(Mongoose称之为"sub-documents")。
这有点快,因为要加载特定的Blog
文档,您只需要执行一个查询(而不是Blog
文档的一个查询,User
文档的另一个查询如果您将使用填充),但它的灵活性较低,并且取决于数组的大小(您将要存储的用户数),您可能会遇到某些MongoDB限制。