mongoose中ref和数组模式引用类型的区别

时间:2015-07-07 06:05:37

标签: mongoose

创作者:{     type:Schema.ObjectId,     ref:'用户'   } })

创建者:[UserSchema]

两行代码之间有什么区别。

1 个答案:

答案 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限制。