mongoose中的exec()方法

使用mongoose中方法时,例如查询第一条数据fondOne(),以then()获取返回值,获得的是promise对象,但如果在then()前加上exec()方法,发现返回值并没有什么变化,那么exec()方法还有存在的必要吗,查询了半天,获得了答案

 

加不加 .exec() 都会调用 then 方法?

查看资料都说 exec() 返回 Promise ?但是不加 exec() 也调用 then() 里面的方法。

答:

有区别的,一个是返回data一个是返回query,比如你想写一个统一的分页方法,就需要把查询的query传进去分页方法,通过附加其他查询来实现

 

两者返回的都是 promise对象
exec一般用于独立的动作一次性执行,
then则用于连续性的动作

从其方法名也可以区别它们的用法,exec就是执行的意思,then就是然后怎么怎么,

exec和then的参数是有所不同的,前者是 callback(err,doc),后者则是 resolved(doc),rejected(err)

### Mongoose 查询方法的特点 Mongoose 提供了一套面向对象的方式与 MongoDB 进行交互,使得开发者可以更方便地定义模式(Schema),并基于这些模式创建模型(Model)[^1]。 #### 特点 - **强类型验证**:通过 Schema 定义的数据结构能够自动执行字段类型的校验,在保存之前确保数据的有效性。 - **内置钩子支持**:允许在特定事件发生前/后触发自定义逻辑,比如 `pre` 和 `post` 中间件可用于处理复杂业务需求。 - **链式调用语法糖**:提供流畅的 API 设计风格,使查询语句更加简洁易读。 ```javascript const user = await User.findOne({ name: 'John' }).populate('posts').exec(); ``` #### 性能优化措施 为了提高性能表现,除了合理设计索引外,还可以借助第三方插件来实现缓存机制。例如 mongoose-redis-cache 插件就能够在 Redis 上缓存查询结果,从而显著减少数据库访问次数,加快响应时间[^3]。 #### 主要功能 - **聚合管道(Aggregate Pipeline)** 支持复杂的统计计算; - **虚拟属性(Virtuals)** 可以为文档添加只读属性而不实际存储于数据库中; - **静态方法(Static Methods)** 和 实例方法(Instance Methods) 扩展 Model 的行为能力; #### 使用场景 当应用程序需要频繁操作关系型较强的数据集时,采用 Mongoose 能够简化开发流程并增强代码可维护性。特别是对于那些希望利用 JavaScript 编写全栈应用的人来说,Mongoose 是构建 RESTful Web Services 的理想选择之一。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值