在 Mongoose 中未定义模型的默认值的正确方式

阅读时长 4 分钟读完

在 Mongoose 中未定义模型的默认值的正确方式

Mongoose 是一个 Node.js 中极受欢迎的 ORM(对象关系映射)库,它可以简化 MongoDB 数据库的操作。在 Mongoose 中,我们可以使用模型来定义一个文档(document)对象的结构。模型是基于一个 Schema(模式)进行创建的,模式定义了文档的字段和值的类型、默认值、验证规则等信息。当我们创建一个文档对象时,如果这个文档对象的值未定义,那么 Mongoose 将会使用默认值填充该字段。但是,如果我们没有为某个字段定义默认值,那么 Mongoose 将会使用默认的空值填充该字段。本篇文章将讨论在 Mongoose 中未定义模型的默认值的正确方式。

默认值定义在 Schema 中

在 Mongoose 中,定义默认值的正确方式是将默认值定义在 Schema 中。例如,我们假设有一个用户模型 User:

-- -------------------- ---- -------
----- ---------- - --- -----------------
  ----- -
    ----- -------
    --------- ----
  --
  ---- -------
  --------- -
    ----- -----
    -------- --------
  -
--

----- ---- - ---------------------- -----------

在上面的代码中,我们将默认值定义在了 birthday 字段中。这意味着,如果我们没有为 birthday 字段赋值,Mongoose 将自动为其赋值为当前日期。

注意:在使用功能较强的 Schema.default() 方法设置默认值时,需要将该方法的返回值设置为 Undefined,否则 Mongoose 将不会将默认值应用于未定义的字段。

-- -------------------- ---- -------
----- ---------- - --- -----------------
  ----- -
    ----- -------
    --------- ----
  --
  ---- -------
  --------- -
    ----- -----
    -------- -- -- -
      ------ --- ------
    -
  -
--

----- ---- - ---------------------- -----------

----- ------- - --- ------
  ----- ---- ---------
--

----------------------------- -- ------

在使用默认值时,请确保只处理简单类型(Number、String、Boolean)或返回值不会改变的函数。对于会改变返回值的函数或者复杂类型,建议使用 getter 或者 populate 来获取或者设置默认值。

结论

在 Mongoose 中,我们应该将默认值定义在 Schema 中。通过这种方式,我们可以确保在创建文档对象或者更新文档时,未定义的字段将会填充其默认值。当我们设置默认值时,也需要注意处理类型和函数。正确使用默认值不仅可以提高代码的可读性和可维护性,而且还可以减少错误的发生。

示例代码

下面的代码演示了如何使用默认值。

-- -------------------- ---- -------
----- -------- - -------------------
-------------------------------------------- - ---------------- ----- ------------------- ---- --

----- ---------- - --- -----------------
  ----- -
    ----- -------
    --------- ----
  --
  ---- -------
  --------- -
    ----- -----
    -------- --------
  -
--

----- ---- - ---------------------- -----------

----- ------- - --- ------
  ----- ---- ---------
--

-------------------- ---------- -- -
  -- ------- -
    ------------------
  - ---- -
    ------------------------------- -- ------
  -
--

---------------------------

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6752fdd78bd460d3ad9a4225

纠错
反馈