mongoose中引用的ref和数组模式类型之间的差异

mongoose中引用的ref和数组模式类型之间的差异,mongoose,Mongoose,创建者:{ 类型:Schema.ObjectId, 参考:“用户” } }) 创建者:[用户模式] 这两行代码之间有什么区别。(为了让事情更容易解释,我将调用creator是,Blog属性的模型) 这声明了一个creator属性,该属性存储对用户文档的引用(基本上是ObjectId)。这有点像SQL中的外键 当您在博客模型上执行查询时,您可以告诉Mongoose使用自动加载引用的文档。这是必要的,因为用户文档存储在单独的集合中(在这方面,它们是独立的) 这声明了一个creator属性,用于存储用

创建者:{ 类型:Schema.ObjectId, 参考:“用户” } })

创建者:[用户模式]

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

(为了让事情更容易解释,我将调用
creator
是,
Blog
属性的模型)

这声明了一个
creator
属性,该属性存储对
用户
文档的引用(基本上是
ObjectId
)。这有点像SQL中的外键

当您在
博客
模型上执行查询时,您可以告诉Mongoose使用自动加载引用的文档。这是必要的,因为
用户
文档存储在单独的集合中(在这方面,它们是独立的)

这声明了一个
creator
属性,用于存储用户列表。这些用户有自己的Mongoose模式(用于验证),但主要区别在于它们不存储在单独的集合中;换句话说,每个
用户
文档只存储在
博客
文档的
创建者
数组中(Mongoose调用这些)

这要快一些,因为要加载特定的
博客
文档,您只需执行一个查询(而不是一个查询用于
博客
文档,如果您要使用population,则另一个查询用于
用户
文档),但灵活性较低,取决于数组的大小(您将要存储的用户数)您可能会遇到某些MongoDB限制。

(为了让事情更容易解释,我将调用
creator
是,
Blog
属性的模型)

这声明了一个
creator
属性,用于存储对
用户
文档的引用(基本上是
ObjectId
),有点像SQL中的外键

当您在
博客
模型上执行查询时,您可以告诉Mongoose使用自动加载引用的文档。这是必要的,因为
用户
文档存储在单独的集合中(在这方面,它们是独立的)

这声明了一个
creator
属性,该属性存储用户列表。这些用户有自己的Mongoose模式(用于验证),但主要区别在于它们不存储在单独的集合中;换句话说,每个
用户
文档只存储在
博客
文档的
创建者
数组中(Mongoose称其为)


这要快一些,因为要加载特定的
博客
文档,您只需执行一个查询(而不是一个查询用于
博客
文档,如果您要使用population,则另一个查询用于
用户
文档),但灵活性较低,取决于数组的大小(您将要存储的用户数)您可能会遇到某些MongoDB限制。

因此,如果用户架构有一个名为skill的属性,并且我想查询创建者架构以填充由具有特定技能的用户创建的所有帖子,我可以写:post.find({user.skill:query})。填充('post').exec(err,function())。如果是,则两行代码中哪一行最适合这样做。@dtytomi使用第一种方法时,需要使用
populate()的属性
查找由具有特定技能的用户创建的帖子。对于子文档,您可以直接查询。一种方法不一定比另一种好,这取决于具体的用例。因此,如果用户架构具有名为skill的属性,并且我想查询创建者架构,以使用特定的n skill我可以写:post.find({user.skill:query}).populate('post').exec(err,function())。如果是,那么两行代码中哪一行最适合这样做。@dtytomi在使用第一个方法时,需要使用
populate()的属性
查找由具有特定技能的用户创建的帖子。对于子文档,您可以直接查询。一种方法不一定比另一种好,它取决于具体的用例。
creator: { type: Schema.ObjectId, ref: 'User' } }
creator: [UserSchema]