Tom*_*son 29 regex indexing search mongodb full-table-scan
我正在尝试查找字段以值开头的文档.
使用notablescan禁用表扫描.
这有效:
db.articles.find({"url" : { $regex : /^http/ }})
Run Code Online (Sandbox Code Playgroud)
这不是:
db.articles.find({"source.homeUrl" : { $regex : /^http/ }})
Run Code Online (Sandbox Code Playgroud)
我收到错误:
error: { "$err" : "table scans not allowed:moreover.articles", "code" : 10111 }
Run Code Online (Sandbox Code Playgroud)
两者都有索引url和source.homeUrl:
{
"v" : 1,
"key" : {
"url" : 1
},
"ns" : "mydb.articles",
"name" : "url_1"
}
{
"v" : 1,
"key" : {
"source.homeUrl" : 1
},
"ns" : "mydb.articles",
"name" : "source.homeUrl_1",
"background" : true
}
Run Code Online (Sandbox Code Playgroud)
对子文档索引的正则表达式查询有任何限制吗?
Ada*_*ord 34
禁用表扫描时,这意味着在查询优化器中表扫描"获胜"的任何查询都将无法运行.您还没有发布解释,但可以合理地假设这是基于错误发生的事情.尝试明确地提示索引:
db.articles.find({"source.homeUrl" : { $regex : /^http/ }}).hint({"source.homeUrl" : 1})
Run Code Online (Sandbox Code Playgroud)
这应该消除表扫描作为可能的选择,并允许查询成功返回.
| 归档时间: |
|
| 查看次数: |
51377 次 |
| 最近记录: |