【问题标题】:Search for string that doesn't start with a certain prefix using regex + index使用 regex + index 搜索不以特定前缀开头的字符串
【发布时间】:2021-12-27 10:38:45
【问题描述】:

我们正在尝试在排除具有以某个前缀开头的字段的记录时使用索引,当使用以下内容时,未使用索引:

{"field": {"$not": {"$regex": "^abcd"}}}

而且要花很长时间才能得到结果。

但使用时:

{"field": {"$regex": "^abcd"}}

使用索引,我们立即得到结果!

有没有办法解决这个问题?

【问题讨论】:

    标签: regex mongodb indexing


    【解决方案1】:

    如果字符串只是字母数字,您可以使用不等式并完全避免使用正则表达式:

    {$or: [{"field": {"$lt": "abcd"}}, {"field": {"$gt": "abcd~"}}]}
    

    由于~ 大于z,该查询将返回所有不以该前缀开头的值,只要~ 不是您正在检查的值中的有效字符。

    Playground

    【讨论】:

    • 很遗憾,由于某种原因,它仍然没有使用索引
    • 使用.explain(true) 运行查询以查看它考虑了哪些查询,以及它们的执行情况。您尝试使用的索引的规格/键是什么?
    猜你喜欢
    • 1970-01-01
    • 2021-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多