在 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