根据猫鼬文档:
Mongoose 模型为 CRUD 操作提供了多个静态辅助函数。这些函数中的每一个都返回一个 mongoose Query对象。
模型是从模式定义编译而来的奇特构造函数。
Mongoose 文档表示与存储在 MongoDB 中的文档的一对一映射。每个文档都是其模型的一个实例。
现在,模型上的所有静态 CRUD 函数都会返回一个查询。然而,在文档部分的指南下,它说“当您使用 findOne() 等模型函数从 MongoDB 加载文档时,您会得到一个 Mongoose 文档。”。
在一个地方 Model.findOne() 返回一个 Query 对象,在另一个部分返回一个文档...有人可以帮忙解释一下吗?
小智 2
确实是个好问题。简单地创建查询并不意味着从模型加载文档。当您使用findOne()方法时,您只需创建一个查询,它将返回Query Object。当您执行此查询以从模型加载文档时,在本例中返回的是document Object. 希望下面的示例能够阐明这个想法,因为知道这不是执行查询的唯一方法。
第一部分是创建查询
const query = myModel.findOne({ name })
console.log(query.constructor.name) // Query
console.log(query instanceof mongoose.Query) // True
console.log(query instanceof mongoose.Document) // False
Run Code Online (Sandbox Code Playgroud)
第二部分是执行它
query.then((document) => {
console.log(document.constructor.name) // model
console.log(document instanceof mongoose.Query) // False
console.log(document instanceof mongoose.Document) // True
response.json(document)
}).catch((error) => {
response.json(error)
})
Run Code Online (Sandbox Code Playgroud)