Overview
Mongoose是一个基于 Node.js 的对象数据建模 (ODM) 库,提供基于模式的数据建模、验证、查询构建和业务逻辑钩子。
ODM 类似于用于传统SQL数据库的对象关系映射器 (ORM),但专为 MongoDB 基于文档的数据模型而设计。
什么是对象数据建模?
对象数据建模 (ODM) 在应用程序代码和数据库文档之间创建结构化关系。使用Mongoose等 ODM,您可以在应用程序级别定义映射到MongoDB集合的模式,并对这些集合中的文档实施结构。
MongoDB提供了灵活数据模型,允许您随着应用程序的发展修改数据库模式。但是,您的使用案例可能要求集合中各文档的数据结构一致性。
Mongoose通过提供以下功能来满足这种一致性需求:
定义文档的结构和数据类型
从模式生成模型以与集合交互
在应用程序级别执行数据验证规则
在数据库操作之前或之后执行自定义逻辑
使用 Fluent API构建和执行数据库查询
其他集合中的参考文档(类似于联接)
模式执行
Mongoose在应用程序级别实施模式。您可以定义一个模式,该模式指定集合中文档的结构,包括字段名称、数据类型和验证规则。在执行数据库操作之前, Mongoose会根据此模式验证数据。
模式和验证规则仅存在于 Node.js应用程序代码中。 MongoDB服务器本身并不知道这些约束,并接受应用程序发送的任何有效BSON文档。
数据建模
Mongoose要求您在与集合交互之前定义模式和模型。有关系数据库或其他 ORM 经验的开发者可能会熟悉这种结构化方法。
代价是灵活性降低。当您需要修改数据结构时,必须更新Mongoose模式。
模式验证
Mongoose通过两种方式验证数据。首先,通过在模式中定义字段类型,指定每个字段允许的数据类型。 Mongoose会拒绝尝试插入与定义类型不匹配的数据的操作。
其次,您可以添加特定的验证规则,例如必填字段、最小值或最大值、字符串长度约束或自定义验证函数。
这些验证规则仅应用于您在 Node.js应用程序中使用Mongoose 的情况。其他应用程序或数据库工具可以绕过这些规则,因为它们仅存在于应用程序代码中。
有关使用MongoDB Node.js驾驶员和 MongoDB内置模式验证来验证数据的更多信息,请参阅服务器手册中的MongoDB模式验证指南。
处理多个集合
Mongoose和MongoDB Node.js驾驶员都支持合并来自多个集合的文档,类似于关系数据库中的联接。
在Mongoose中填充
Mongoose提供 populate() 方法来引用其他集合中的文档。您可以通过指定引用所引用的集合来在模式中定义引用。 ObjectId 是一种常用的引用类型,但Mongoose还支持使用其他类型,例如字符串、数字、UUID 和缓冲区。查询时, Mongoose可以自动将这些引用替换为实际文档。
Mongoose通过执行多个查询来执行填充操作。在某些情况下,例如在处理大型扫描或索引丢失时,此方法可能很有用。
MongoDB中的 $lookup
MongoDB提供了 $lookup聚合阶段,用于在同一数据库中的集合之间执行类似于左外连接的动作。 MongoDB Node.js驾驶员可让您通过聚合管道直接访问权限此功能。
$lookup操作符作为单个聚合管道操作运行。在某些情况下,这种方法可以提高性能,但实际性能取决于数据大小、可用索引和查询模式等因素。
开始使用Mongoose
要学习;了解如何安装Mongoose、连接到MongoDB以及使用Mongoose模式和模型执行增删改查操作,请参阅 Mongoose入门教程。