我正在使用 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