在使用 Mongoose 构建 Node.js 应用时,经常需要定义模型的默认值。默认值可以在创建文档时自动填充,避免了手动填充的麻烦。本文将介绍 Mongoose 中指定 default 值的最佳实践,并提供示例代码。
1. 指定默认值的方式
Mongoose 提供了两种指定默认值的方式:
- 在 Schema 中定义 default 属性
- 在文档创建时指定默认值
1.1 在 Schema 中定义 default 属性
在 Schema 中定义 default 属性可以为模型中的所有文档指定默认值。例如,我们可以定义一个名为 User
的模型,并为 name
字段指定默认值:
const userSchema = new mongoose.Schema({ name: { type: String, default: 'Anonymous' }, age: Number });
在创建 User
文档时,如果没有指定 name
字段的值,name
字段的默认值将为 Anonymous
。
1.2 在文档创建时指定默认值
在创建文档时指定默认值可以为每个文档指定不同的默认值。例如,我们可以创建一个名为 User
的模型,并在创建文档时指定 name
字段的默认值:
const user = new User({ name: 'John', age: 20 });
在这个例子中,name
字段的默认值将为 John
,而不是在模型中定义的 Anonymous
。
2. 最佳实践
在指定默认值时,我们需要遵循以下最佳实践:
- 为每个字段指定默认值
- 使用函数指定默认值,而不是直接指定值
- 避免使用引用类型作为默认值
2.1 为每个字段指定默认值
为每个字段指定默认值可以避免出现未定义的字段。例如,我们可以为 User
模型中的每个字段指定默认值:
-- -------------------- ---- ------- ----- ---------- - --- ----------------- ----- - ----- ------- -------- ----------- -- ---- - ----- ------- -------- - -- -------- - ----- ------- -------- -- - ---
在创建 User
文档时,如果没有指定 address
字段的值,address
字段的默认值将为 ''
。
2.2 使用函数指定默认值,而不是直接指定值
使用函数指定默认值可以避免出现引用类型的问题。例如,我们可以为 User
模型中的 createdAt
字段指定默认值:
-- -------------------- ---- ------- ----- ---------- - --- ----------------- ----- - ----- ------- -------- ----------- -- ---- - ----- ------- -------- - -- ---------- - ----- ----- -------- -------- - ---
在这个例子中,createdAt
字段的默认值将为当前时间,而不是在模型中定义的字符串。
2.3 避免使用引用类型作为默认值
引用类型作为默认值可能会导致意外的结果。例如,我们可以为 User
模型中的 friends
字段指定默认值:
-- -------------------- ---- ------- ----- ---------- - --- ----------------- ----- - ----- ------- -------- ----------- -- ---- - ----- ------- -------- - -- -------- - ----- --------- -------- -- - ---
在这个例子中,friends
字段的默认值将为一个空数组。如果我们在创建文档时使用相同的数组作为默认值,那么所有文档的 friends
字段将指向同一个数组。这可能会导致意外的结果,例如一个文档的 friends
字段被修改后,其他文档的 friends
字段也会被修改。
为了避免这种情况,我们应该避免使用引用类型作为默认值。如果需要为引用类型指定默认值,可以使用函数指定默认值,并返回一个新的引用类型。
3. 示例代码
下面是一个完整的示例代码:
-- -------------------- ---- ------- ----- -------- - -------------------- -------------------------------------------- - ---------------- ---- --- ----- ---------- - --- ----------------- ----- - ----- ------- -------- ----------- -- ---- - ----- ------- -------- - -- ---------- - ----- ----- -------- -------- -- -------- - ----- --------- -------- ---------- - ------ --- - - --- ----- ---- - ---------------------- ------------ ----- ----- - --- ------ ----- ------- ---- --- -------- ------- -------- --- ----- ----- - --- ------ ----- ------- ---- -- --- ------------------- -------------------
在这个例子中,我们创建了一个名为 User
的模型,并为 name
、age
、createdAt
和 friends
字段指定了默认值。我们还创建了两个 User
文档,并在创建文档时指定了不同的默认值。最后,我们打印了这两个文档的内容。
4. 总结
在 Mongoose 中指定默认值是一个非常有用的功能。本文介绍了在 Mongoose 中指定默认值的最佳实践,并提供了示例代码。通过遵循这些最佳实践,我们可以更好地管理我们的文档,并避免出现意外的结果。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6619fbd7d10417a222abe427