首页 > 解决方案 > 猫鼬,引用数组,对还是错?

问题描述

当我浏览我的节点猫鼬模式代码时,我看到我以两种不同的方式编写了引用数组。

在我编写的代码的某些部分中,管理器是一组用户引用

managers: [{
  type: mongoose.Schema.ObjectId,
  ref: 'user'
}]

但在其他部分,我说 manager 是对 user 的引用,其中类型是 objectIds 数组

managers: {
  type: [mongoose.Schema.ObjectId],
  ref: 'user'
}

两种方法似乎都有效,但有人知道是否有任何区别吗?一种方法是不正确的做法吗?

编辑:

我发现了两者之间的不同之处。当我查询模型并想要填充管理器时,第二个版本不会返回实际用户。第一个填充管理器并返回一个用户对象数组,但第二个返回一个空数组,即使管理器数组包含用户的 ObjectId...

编辑2:

是否应该在单独的集合中引用模式时使用第一个示例。如果您查看https://mongoosejs.com/docs/populate.html中的所有示例,它们的行为就像我的第一个示例一样。第二个看起来像是在同一个集合中使用子模式时使用的。

标签: node.jsmongoose

解决方案


编辑:确认这里应该使用第二种方法(转到线程的底部)。

由于在您的用例中无关紧要,我建议您使用上面链接的线程中建议的表单,因为它在发出引用的情况下可能很重要。


mongoose 文档似乎使用第二种方法。从逻辑上讲,这对我来说也更有意义,因为我读到它的类型是一个对象数组。我不相信他们正式建议一个或另一个。

查看此页面以获取一些示例。


推荐阅读