在使用 Mongoose 进行开发时,我们可能会遇到需要设置默认值的场景,这时候就需要用到 Mongoose 提供的 default 和 init 两个选项。本文将详细讲解这两个选项的作用与用法,以及相应的示例代码,帮助读者更好地理解和掌握相关知识。
default 选项
在 Mongoose 中,default 选项用于设置一个 Schema 路径的默认值,在文档被存储到 MongoDB 数据库时,如果该路径没有被设置值,将会自动使用该默认值。
语法
default 可以是任意 JavaScript 数据类型,如字符串、数字、布尔值、对象等。
----- ------ - --- ----------------- ----- - ----- ------- -------- ----- ---- -- ---- - ----- ------- -------- -- -- ------ - ----- ------- -------- --- -- -- --- --
如上代码中,name、age 和 email 分别为三个 Schema 路径,它们都设置了一个默认值。name 和 age 的默认值为字符串和数字,而 email 的默认值是一个空字符串。
示例
我们可以通过一个实例来更好地理解 default 的使用方法,假设我们有一个用户模型,其 Schema 如下:
----- ---------- - --- ----------------- ----- - ----- ------- --------- ---- -- ---- - ----- ------- --------- ----- -- ------ - ----- ------- --------- ----- -- ----------- - ----- ----- -------- -------- - --
在上述模型中,我们设置了一个 created_at 路径,默认值为当前日期。
下面我们通过代码来实现一个添加用户的功能:
----- ---- - ---------------------- ----------- ----- ---------- - ------ ---- ------ -- - ----- ---- - --- ------ ----- ---- ----- -- ----------------- ------- -- - -- ------- - ------------------ ------ - ------------------- -- - -- -------- ---------- --- ----------------- --- ---------------- -- ------- ---------- --- ------------------- --- ------------------
通过上述代码,我们可以看到,当添加第一个用户时,由于未设置 created_at 的默认值,该值为 undefined;而添加第二个用户时,由于设置了 created_at 的默认值,该值为当前日期。
init 选项
init 选项用于指定某个字段在被初始化时需要执行的函数。该函数可以接受一个参数,即该字段的默认值。该选项主要用于对 Schema 中指定字段做特殊处理,比如加密或格式化等操作。
语法
init 函数会在字段被设置默认值时被执行。下面是一个使用 init 函数的示例代码:
----- ---------- - --- ----------------- ----- - ----- ------- --------- ---- -- --------- - ----- ------- --------- ----- ----- ------------------------- - ----- ---- - ---------------------- ------ -------------------------------- ----- - -- -- --- --
在上述代码中,我们给 password 路径设置了一个 init 函数,该函数会在默认值被设置时被执行。该函数接受一个参数 defaultPassword,即 password 的默认值。在函数内部,我们使用 bcrypt 加密算法处理默认值,并返回加密后的结果。
示例
为了更好地说明 init 的使用方法,我们可以结合实际场景来看一个例子。假设我们有一个文章模型,其 Schema 如下:
----- ------------- - --- ----------------- ------ - ----- ------- --------- ---- -- -------- - ----- ------- --------- ---- -- ----------- - ----- ----- -------- -------- -- ----------- - ----- ----- -------- -------- - --
在上述模型中,我们想要在每次更新文章时,将 updated_at 字段的值自动更新为当前时间。为此,我们可以通过编写一个 init 函数来实现该功能:
----- ------------- - --- ----------------- ------ - ----- ------- --------- ---- -- -------- - ----- ------- --------- ---- -- ----------- - ----- ----- -------- -------- -- ----------- - ----- ----- -------- --------- ----- ---------- - ------ --- ------ -- ------ - - -- -- ------ ----- ------------- - ----- ---- ------ -------- -- - ----- ------- - ----- ----------------------------- - ------ -------- ----------- ---- -- --- ------ ---- ------- -- - ---- ---- -- -------------------- -
通过上述代码,我们可以看到,在更新文章时,我们将 updated_at 设置为 null,这样在保存至数据库时,就会自动调用 init 函数,将 updated_at 的默认值设为当前时间。
总结
在本文中,我们深入讲解了 Mongoose 默认值 default 和 init 的用法和应用场景,这两个选项可以帮助我们在开发过程中更加灵活地使用 Mongoose,提高代码效率和可维护性。提醒读者注意,在使用这两个选项时,一定要注意类型和调用顺序,避免出现不必要的错误和问题。
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/665814eed3423812e4dda963