为何Mongoose的findOneAndUpdate不使用.then链式调用就无法生效?
为什么Mongoose的findOneAndUpdate不调用then就不执行?
Mongoose的查询方法(包括findOneAndUpdate)是惰性执行的——你写Product.findOneAndUpdate(...)的时候,只是创建了一个查询对象,并没有真正向MongoDB服务器发送更新请求。
只有触发查询执行后,操作才会真正落地到数据库,触发执行的方式包括:
- 调用
.then()或.catch()(像你第一个代码里那样) - 在异步函数中用
await包裹查询 - 调用
.exec()方法
所以你只保留Product.findOneAndUpdate(...)的时候,只是定义了查询逻辑,但没有触发执行,自然不会修改数据库。如果想单独执行这个更新而不用回调或await,可以改成:
Product.findOneAndUpdate({ name: 'Cycling Jersey' }, { onSale: true }, { new: true }).exec()
内容的提问来源于stack exchange,提问作者Akshay Sarmalkar
相关产品推荐
相关产品推荐

