findById returns 除引用另一文档的字段外的所有字段

findById returns all fields except one that references another document

当我在我的模型上使用 findById 时,它 return 除了引用另一个文档的字段之外的所有字段。

这是数据库中的文档(MongoDB Document):

{
  _id: ObjectId("62791a34bfdd286f0d9105b7"),
  title: 'yes!',
  path: 'public/uploads/birds-1.mp4',
  author: {
    _id: ObjectId("6276b73f1793107c9027a8ee"),
    name: -,
    email: -,
    image: -,
    emailVerified: null,
  },
}

这就是我在使用 findById 时得到的结果(不是 return author 字段):

{
  _id: new ObjectId("62791a34bfdd286f0d9105b7"),
  title: 'yes!',
  path: 'public/uploads/birds-1.mp4'
}

视频架构:

mongoose.Schema({
  title: {
    type: String,
    required: true,
  },
  path: {
    type: String,
    required: true,
  },
  author: {
    type: mongoose.Schema.Types.ObjectId,
    ref: "User",
  },
})

根据 MongoDB 文档,您需要对引用的 table.

执行查找

The references ID page notes that what you are doing is correct。您正在将一个对象的 _id 设置为架构中另一个对象的参考点。

然而,它在顶部做出了重要的区分,您需要使用 $lookup functionality 来获取记录,并且它是一次性引用的记录。

similar, previously answered question here on Stack Overflow.

证实了这一点

Mongoose 支持 $lookup 功能 through a function they call "populate",我认为您会希望在其中执行查找,因为您的问题被标记为您正在使用 Mongoose。

如果您需要帮助实现填充功能粘贴到您用来从数据库中检索数据的代码中,可能会有人帮助您。

当 运行 您的查询时,您应该明确 populate 引用字段:

const video = await Videos.findById(_id).populate('author').exec()

您可以在官方docs.

上阅读更多关于查询人口的内容