Mongoose 是一个 Node.js 的 ORM(Object Relational Mapping)库,它提供了一种方便的方式来操作 MongoDB 数据库。在 Mongoose 中,我们可以使用 update 方法来更新数据库中的文档。
在本文中,我们将深入探讨 Mongoose 中 update 方法的附加性,包括其可选参数、返回值和使用示例。通过学习本文,你将能够更好地使用 Mongoose 来操作 MongoDB 数据库。
update 方法的基本使用
update 方法是 Mongoose 中用于更新文档的方法,其基本使用方法如下所示:
------------------------ ------- -------- ---------
其中,各参数的含义如下:
- conditions:用于筛选要更新的文档的条件,可以是一个对象或一个查询语句。
- update:用于更新文档的数据,可以是一个对象或一个更新操作符。
- options:可选参数,可以指定是否返回更新后的文档、是否启用写关注、是否强制更新等。详见下文。
- callback:回调函数,用于处理更新结果。
例如,我们可以使用以下代码来将 name 为 Alice 的文档的 age 字段更新为 18:
-------------- ----- ------- -- - ---- -- -- ----- ---- -- - -- ----- ----- ---- ----------------- ---
可选参数
除了必选参数之外,update 方法还支持一些可选参数,这些参数可以用于指定一些更新选项。下面是 update 方法支持的可选参数:
multi
- 类型:Boolean
- 默认值:false
multi 参数用于指定是否更新多个文档。如果设置为 true,则会更新所有符合条件的文档,否则只会更新第一个符合条件的文档。
例如,我们可以使用以下代码来将所有 age 大于等于 18 的文档的 isAdult 字段设置为 true:
-------------- ---- - ----- -- - -- - -------- ---- -- - ------ ---- -- ----- ---- -- - -- ----- ----- ---- ----------------- ---
upsert
- 类型:Boolean
- 默认值:false
upsert 参数用于指定是否启用 upsert 功能。如果设置为 true,则会在没有符合条件的文档时创建一个新文档。
例如,我们可以使用以下代码来更新 name 为 Bob 的文档,如果不存在则创建一个新文档:
-------------- ----- ----- -- - ---- -- -- - ------- ---- -- ----- ---- -- - -- ----- ----- ---- ----------------- ---
overwrite
- 类型:Boolean
- 默认值:false
overwrite 参数用于指定是否强制更新整个文档。如果设置为 true,则会用 update 中的数据替换整个文档,否则只会更新 update 中指定的字段。
例如,我们可以使用以下代码来将 name 为 Alice 的文档的数据完全替换为 { name: 'Alice', age: 18 }:
-------------- ----- ------- -- - ----- -------- ---- -- -- - ---------- ---- -- ----- ---- -- - -- ----- ----- ---- ----------------- ---
runValidators
- 类型:Boolean
- 默认值:false
runValidators 参数用于指定是否启用验证器。如果设置为 true,则会在更新前对 update 中的数据进行验证,如果验证失败则会抛出错误。
例如,我们可以使用以下代码来更新 age 大于等于 18 的文档的 age 字段为 20,如果 age 小于 18 则会抛出错误:
-------------- ---- - ----- -- - -- - ---- -- -- - -------------- ---- -- ----- ---- -- - -- ----- ----- ---- ----------------- ---
setDefaultsOnInsert
- 类型:Boolean
- 默认值:false
setDefaultsOnInsert 参数用于指定是否在 upsert 时设置默认值。如果设置为 true,则会在 upsert 时将模型定义中的默认值设置到新文档中。
例如,我们可以使用以下代码来更新 name 为 Bob 的文档,如果不存在则创建一个新文档,并将模型定义中的默认值设置到新文档中:
-------------- ----- ----- -- - ---- -- -- - ------- ----- -------------------- ---- -- ----- ---- -- - -- ----- ----- ---- ----------------- ---
timestamps
- 类型:Boolean/Object
- 默认值:false
timestamps 参数用于指定是否启用时间戳功能。如果设置为 true,则会在更新时自动更新 updatedAt 字段,如果不存在则会创建一个新字段 createdAt。
如果 timestamps 参数的值是一个对象,则可以指定 createdAt 和 updatedAt 字段的名称。
例如,我们可以使用以下代码来更新 name 为 Alice 的文档,并自动更新 updatedAt 字段:
-------------- ----- ------- -- - ---- -- -- - ----------- ---- -- ----- ---- -- - -- ----- ----- ---- ----------------- ---
返回值
update 方法的返回值是一个 Promise 对象或一个回调函数。如果使用 Promise,则会在更新完成后返回更新结果。如果使用回调函数,则会在更新完成后调用回调函数,并将更新结果作为参数传递给回调函数。
更新结果是一个对象,其中包含以下属性:
- n:更新的文档数量。
- nModified:实际更新的文档数量。如果使用了 upsert 或者 overwrite 参数,则 nModified 可能小于 n。
- ok:更新是否成功。
例如,我们可以使用以下代码来输出更新结果:
-------------- ----- ------- -- - ---- -- ------------- -- - ----------------- -- - -- -- ---------- -- --- - - -------------- -- - ----- ---- ---
使用示例
下面是一些使用 update 方法的示例代码:
将所有文档的 age 字段加 1
---------------- - ----- - ---- - - -- - ------ ---- -- ----- ---- -- - -- ----- ----- ---- ----------------- ---
将所有 age 大于等于 18 的文档的 isAdult 字段设置为 true
-------------- ---- - ----- -- - -- - -------- ---- -- - ------ ---- -- ----- ---- -- - -- ----- ----- ---- ----------------- ---
将 name 为 Alice 的文档的 age 字段更新为 19
-------------- ----- ------- -- - ---- -- -- ----- ---- -- - -- ----- ----- ---- ----------------- ---
将 name 为 Bob 的文档的 age 字段更新为 20,如果不存在则创建一个新文档
-------------- ----- ----- -- - ---- -- -- - ------- ---- -- ----- ---- -- - -- ----- ----- ---- ----------------- ---
将所有 age 大于等于 18 的文档的 age 字段更新为 20,如果 age 小于 18 则会抛出错误
-------------- ---- - ----- -- - -- - ---- -- -- - -------------- ---- -- ----- ---- -- - -- ----- ----- ---- ----------------- ---
将 name 为 Bob 的文档的 age 字段更新为 20,如果不存在则创建一个新文档,并将模型定义中的默认值设置到新文档中
-------------- ----- ----- -- - ---- -- -- - ------- ----- -------------------- ---- -- ----- ---- -- - -- ----- ----- ---- ----------------- ---
将 name 为 Alice 的文档的数据完全替换为 { name: 'Alice', age: 18 }
-------------- ----- ------- -- - ----- -------- ---- -- -- - ---------- ---- -- ----- ---- -- - -- ----- ----- ---- ----------------- ---
将 name 为 Alice 的文档的数据完全替换为 { name: 'Alice', age: 19 },并自动更新 updatedAt 字段
-------------- ----- ------- -- - ----- -------- ---- -- -- - ----------- ----- ---------- ---- -- ----- ---- -- - -- ----- ----- ---- ----------------- ---
总结
本文对 Mongoose 中 update 方法的附加性进行了详细的解析,包括其可选参数、返回值和使用示例。通过学习本文,你将能够更好地使用 Mongoose 来操作 MongoDB 数据库。
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/6573e401d2f5e1655dd14d1e