在开发 Node.js 应用时,使用 MongoDB 作为持久化存储是非常常见的。而 Mongoose 是一种主流的 MongoDB 操作库,它是基于 MongoDB 的官方 Node.js 驱动程序的封装,提供了一种类似于 ORM 的方式以便于开发人员操作 MongoDB 数据库。
在使用 Mongoose 进行 MongoDB 数据库操作时,Schema 是非常重要的一个概念。Schema 定义了每个文档的结构以及每个字段的数据类型、验证规则等信息。在实际开发中,其中一种常见的需求就是,我们需要在已有的 Schema 上进行扩展或者继承。这篇文章将详细介绍 Mongoose 的 Schema 继承与扩展。
Schema 继承
在实际开发中,我们可能需要定义一些常见的数据结构,在这些数据结构的基础上再进行一些扩展。对于这种场景,Mongoose 提供了 Schema 继承的功能。
Schema 继承的基本思想是,使用一个基础 Schema 定义所有继承 Schema 共有的字段和属性,并将这个基础 Schema 作为继承关系的父级,然后定义所有继承 Schema 自有的字段和属性,并继承自父级 Schema。
下面是一个示例,定义了一个基础的 PersonSchema 和一个继承自 Person 的 StudentSchema:
-- -------------------- ---- ------- ----- -------- - -------------------- -- ----- ------ ------ ----- ------------ - --- ----------------- ----- - ----- ------- --------- ---- -- ---- - ----- ------- ---- -- ---- --- -- ------- - ----- ------- ----- -------- --------- -- --- -- ----- ------ - ------- ------ ----- ------------- - --- ----------------- ------ - ----- ------- ---- -- ---- -- -- ---------- - ----- ------ -- --- -------------------------------- -- - ------------ --- ------------- - ----- ------- - ------------------------- ---------------
在上面的示例中,我们定义了一个基础的 PersonSchema,包含了所有人都需要的字段和属性,然后定义了一个继承自 Person 的 StudentSchema,添加了学生特有的字段和属性,并继承了基础的 PersonSchema。
在实际的开发中,我们可以使用这个 StudentSchema 来操作 MongoDB 数据库,同时也能够使用 PersonSchema 中定义的所有属性和方法。
Schema 扩展
除了使用 Schema 继承来实现复用 Schema 的功能,Mongoose 还支持通过直接扩展 Schema 来定义数据模型的细节。
Schema 扩展的基本思想是,在定义一个 Schema 时,通过添加字段和属性来扩展这个 Schema。与 Schema 继承不同的是,Schema 扩展没有继承关系,它只是在已有的 Schema 基础上添加新的字段和属性。
下面是一个示例,定义了一个基础的 UserSchema,然后在其中添加了一个扩展属性:
-- -------------------- ---- ------- ----- -------- - -------------------- ----- ---------- - --- ----------------- ----- - ----- ------- --------- ---- -- ------ - ----- ------- --------- ---- -- --------- - ----- ------- --------- ---- -- --- ------------------------------------------ ------- - -- -- ----- ---- ------ ------------------------------------------------------------------------------------ -- -------- -------- -- ---- ------- -- ---------------- -------- - ----- -------- -------- ----- - --- ----- ---- - ---------------------- ------------
在上面的示例中,我们定义了一个基础的 UserSchema,包含了所有用户都需要的字段和属性。然后我们使用 path()
方法对 email 字段进行了验证,并添加了一个扩展属性 isAdmin。
在实际的开发中,我们可以使用这个 UserSchema 来操作 MongoDB 数据库,同时也能够使用所有扩展属性。
总结
Schema 继承和 Schema 扩展是 Mongoose 中非常有用的功能,它们让我们能够在定义数据模型时更加方便地复用和扩展已有的 Schema。在实际的开发中,根据自己的需求选择合适的方式进行操作就可以了。
完整的示例代码可以在 这里 获取。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64a2599648841e9894eb1f5c