Azure CosmosDB MongoDB模式Error=2 BadRequest正则报错解决
根因说明
报错核心提示已明确:Azure CosmosDB MongoDB兼容层仅支持标准JS正则的4个有效flag:i、g、m、u,不支持x扩展flag。
当前查询中$options配置为'ix',多传入的x是触发400 BadRequest的直接原因。原生MongoDB支持x flag(用于忽略正则中的空白字符、行内注释),但CosmosDB未实现该扩展能力,因此仅在连接CosmosDB实例时触发报错,本地原生MongoDB环境可正常运行。
修复方案
直接移除$options中的x标识,将配置改为'i'即可。
修改后可正常运行的查询代码:
const foundUsers = await User.find({ $and: [ { isCreator: true }, { $or: [ { username: { $regex: text, $options: 'i' } }, { firstName: { $regex: text, $options: 'i' } }, { lastName: { $regex: text, $options: 'i' } }, ], }, ], }).populate('createdStories');
注意事项
- 如果之前依赖
xflag的特性(给正则加注释、自动忽略正则中的空白字符),需要提前将正则表达式中的冗余空白、注释手动清理后再传入$regex参数,不能依赖xflag实现该能力。 - 不要在
$options中添加CosmosDB不支持的其他非标准正则flag,避免再次触发同类报错。
内容的提问来源于stack exchange,提问作者Brettins
相关产品推荐
相关产品推荐

