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

MongoDB正则查询:精确匹配字符串或开头精确子串

MongoDB层级字符串正则查询解决方案

需求匹配正则(仅匹配doc1和doc2)

针对你的需求,要精确匹配Canada.Ontario或Canada.Ontario.Toronto.Downtown,同时排除其他不符合的文档,可使用以下正则表达式:

collection.find({"context": {$regex: "^Canada\\.Ontario(\\.Toronto(\\.Downtown)?)?$"}})

注意:在JavaScript环境中使用时,反斜杠需要转义为\\.;若直接在MongoDB Shell中执行,只需写\.即可。

正则逻辑解释

  • ^:锚定字符串开头,确保从最左侧开始匹配,避免从中间截取的无效匹配
  • Canada\.Ontario:强制匹配前两个完整层级,直接排除像doc3这种在Canada后插入其他层级的文档
  • (\.Toronto(\.Downtown)?)?:可选的后续层级组,?表示该组可出现0次或1次:
    • 组出现0次时,匹配Canada.Ontario(对应doc2)
    • 组出现1次时,匹配Canada.Ontario.Toronto.Downtown(对应doc1)
  • $:锚定字符串结尾,确保没有额外的后续层级,避免匹配到更长的无效字符串

文档匹配验证

对给定集合的匹配结果:

  • doc1(Canada.Ontario.Toronto.Downtown):匹配
  • doc2(Canada.Ontario):匹配
  • doc3(Canada.EasternCanada.Ontario.Toronto.Downtown):不匹配(Canada后不是.Ontario)
  • doc4(England.London):不匹配(开头不是Canada)
  • doc5(France.SouthFrance.Nice):不匹配
  • doc6(空字符串):不匹配

通用场景扩展(匹配目标字符串的所有前缀层级)

如果需要匹配目标字符串Canada.Ontario.Toronto.Downtown的所有前缀层级(包括Canada、Canada.Ontario、Canada.Ontario.Toronto、Canada.Ontario.Toronto.Downtown),可使用以下正则:

collection.find({"context": {$regex: "^Canada(\\.Ontario(\\.Toronto(\\.Downtown)?)?)?$"}})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 16:00:20