You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mongoose 6.6.3中使用_id查询时无法运用$regex的问题

问题:Mongoose 6.6.3中通过_id使用$regex查询报错的解决方法?

我尝试通过_id查询数据,编写了如下代码:

_id: { $regex: '63a1bda46ec7f02cf5e91825', $options: 'i' },
})
.populate('user', 'name')
.sort({ updatedAt: -1 });

但出现错误:

Error: Can't use Options

删除options参数后,又出现新错误:

Error: Can't use $regx

请问该如何解决在Mongoose 6.6.3中通过_id使用$regex查询的问题?


解决方法

首先,MongoDB中的_id默认是ObjectId类型,而$regex是针对字符串类型字段设计的操作符,直接对ObjectId使用$regex会触发类型不匹配的错误,这是问题的核心原因。另外你第二次遇到的错误是拼写失误——把$regex写成了$regx,但即使修正拼写,类型不匹配的问题依然存在。

这里提供两种可行的解决方案:

1. 将_id转为字符串后做正则匹配

利用MongoDB的聚合表达式$expr,先通过$toString把_id转换为字符串类型,再用$regexMatch执行正则匹配,示例代码如下:

Model.find({
  $expr: {
    $regexMatch: {
      input: { $toString: "$_id" },
      regex: '63a1bda46ec7f02cf5e91825',
      options: 'i'
    }
  }
})
.populate('user', 'name')
.sort({ updatedAt: -1 });

2. 精确匹配时直接使用ObjectId(性能最优)

如果你本来就是要精确查询某个_id,完全不需要使用正则,直接将查询字符串转换为ObjectId传入即可,这是效率最高的查询方式:

const mongoose = require('mongoose');

Model.find({
  _id: mongoose.Types.ObjectId('63a1bda46ec7f02cf5e91825')
})
.populate('user', 'name')
.sort({ updatedAt: -1 });

内容的提问来源于stack exchange,提问作者Random People

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 19:05:21