regex - Mongo 正则表达式搜索的索引范围

我正在使用 MongoDB,并且我有一组具有以下结构的文档:

{
    fName:"Foo",
    lName:"Barius",
    email:"fbarius@example.com",
    search:"foo barius"
}

我正在构建一个函数,它将在 search 字段上执行正则表达式搜索。为了优化性能,我在搜索字段中索引了这个集合。然而,事情还是有点慢。所以我在一个示例查询上运行了 explain():

db.Collection.find({search:/bar/}).explain();

查看获胜计划,我看到使用了以下索引边界:

"search": [
        "[\"\", {})",
        "[/.*bar.*/, /.*bar.*/]"
]

第二组是有意义的 - 它从包含 bar 的任何内容到包含 bar 的任何内容。然而,第一组让我感到困惑。它似乎在 "" 包含到 {} 排除的范围内寻找。我担心这组额外的界限会减慢我的查询速度。有必要保留吗?如果不是,我该如何防止它被收录?

最佳答案

我认为这正是 mongodb 使用正则表达式的方式(参见 https://scalegrid.io/blog/mongodb-regular-expressions-indexes-performance/ )。请注意 nscanned/totalKeysExamined 值,如果它太大,则索引对您的查询无用。

另请参阅: MongoDB, performance of query by regular expression on indexed fields

https://stackoverflow.com/questions/38209993/

相关文章:

javascript - 使用 Nodejs 在 mongodb 中存储文件

php - 如何单击表条目并在另一个 mongodb 集合(php/jquery)中搜索它

mongodb - 如何在复杂的 Collection-Object 中附加新文档

mongodb - 为什么直接搜索 MongoDB 分片的全文搜索比通过集群管理器 (mongos)

node.js - 'this' 在 Mongoose 预保存 Hook 中未定义

javascript - MongoError : Unknown modifier: $pushA

java - Spring数据mongo在Query中使用OR

mongodb - Mongod 服务启动退出,代码为 100

mongodb - 如何在 MongoDB 聚合框架中匹配 'undefined' 值?

mongodb - 如何从 Mongoose 中的对象 ID 获取创建日期?