我正在对我的数据集执行MongoDB find()。我的数据集总共有超过一百万个文档,索引尽可能多。我已经确信该系列本身尽可能优化。
我的应用可让您对该集合进行高级搜索。我刚刚设法让一个新的功能工作,让你运行一个通用"不能包含"过滤您已经很复杂的搜索过滤器。问题是搜索现在超过了Mongo的30秒限制!没有一般"不得包含"过滤器,我的示例搜索大约需要5秒钟。如果我减少了所涉及的密钥,搜索会及时回复。
搜索的目标是返回不包含" ARSB"在任何指定的键中(每个文档中总是有大量其他无关键)。我无法在每个密钥上运行$regex
的原因是,如果您这样做,搜索不会返回缺少任何一个密钥的文档。
该应用在PHP脚本中运行find()
查询。这是慢搜索$criteria
:
{
"$and": [
{
"$or": [
{
"columnOne": {
"$regex": "^((?!ARSB).)*$",
"$options": "-i"
}
},
{
"columnOne": {
"$exists": false
}
}
]
},
{
"$or": [
{
"secondColumn": {
"$regex": "^((?!ARSB).)*$",
"$options": "-i"
}
},
{
"secondColumn": {
"$exists": false
}
}
]
},
{
"$or": [
{
"finalColumn": {
"$regex": "^((?!ARSB).)*$",
"$options": "-i"
}
},
{
"finalColumn": {
"$exists": false
}
}
]
},
{
"$or": [
{
"columnOne": {
"$exists": true
}
},
{
"secondColumn": {
"$exists": true
}
},
{
"finalColumn": {
"$exists": true
}
}
]
}
]
}
是什么让这种搜索变得如此之慢?有什么方法吗?