Mongoose findOneAndUpdate返回QueryWithHelpers而非预期文档的问题
问题排查与解决
- 类型不匹配的核心原因:Mongoose的
findOneAndUpdate默认返回更新前的旧文档;当开启upsert: true时,如果没有匹配到原有文档而插入新文档,默认返回null。你的方法声明返回Promise<ISyncedOrder>,但实际方法返回的是Promise<ISyncedOrder | null>,这就导致了类型不匹配。 - 解决步骤:
- 添加
new: true选项,让方法返回更新后(或upsert插入的)的文档 - 调整方法的返回类型声明,兼容可能的
null值;如果业务逻辑确保一定有返回值,可使用类型断言(需谨慎)
- 添加
修改后的代码示例:
static findOneAndUpdate( filter: FilterQuery<ISyncedOrder>, update: UpdateQuery<ISyncedOrder> ): Promise<ISyncedOrder | null> { return SyncedOrders.findOneAndUpdate( filter, update, { upsert: true, new: true } ); }
若业务逻辑可确保必然返回文档,可使用类型断言(不推荐随意使用):
static findOneAndUpdate( filter: FilterQuery<ISyncedOrder>, update: UpdateQuery<ISyncedOrder> ): Promise<ISyncedOrder> { return SyncedOrders.findOneAndUpdate( filter, update, { upsert: true, new: true } ) as Promise<ISyncedOrder>; }
内容的提问来源于stack exchange,提问作者Romeo Sierra
相关产品推荐
相关产品推荐

