猫鼬中的文档和查询之间的区别?

fal*_*ood 5 mongoose

根据猫鼬文档:

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)