为什么Node.js的Mongoose删除文档操作不加await就不执行
问题原因解答
你对Mongoose查询执行逻辑的理解是完全正确的:
Mongoose所有的查询类方法(包括findOneAndDelete、find、updateOne等),调用后不会直接把操作请求发送到MongoDB,只会返回一个查询对象(Query Object),必须主动触发执行逻辑,数据库操作才会真正生效。
触发查询执行的方式共有三种,只要满足任意一种即可:
- 给查询方法传入回调函数作为参数,哪怕是空回调也可以
- 调用返回的查询对象的
.then()方法 - 用
await关键字等待这个查询对象(本质是触发了其实现的thenable接口逻辑)
你第一段代码的问题就在于:只调用findOneAndDelete生成了查询对象,没有做上述三种触发操作,这个操作请求从来没有被发送到MongoDB,自然无法删除对应文档。第二段代码添加await后触发了查询执行,所以删除操作可以正常生效。
如果不想用await,也可以直接传入空回调实现执行,示例如下:
Test_Model.findOneAndDelete({ name: "Test Entry" }, () => {})
内容的提问来源于stack exchange,提问作者confused banana
相关产品推荐
相关产品推荐

