Regex 使用正则表达式加速MongoDB查询
我有一个查询可能太复杂了,MongoDB无法快速执行它。如果我可以改变MongoDB的设置方式,我很想知道 下面是一个示例查询,用于在jobs集合中搜索术语“api” 最终,运行32000个文档需要3秒钟以上(摘自MongoDB Profiler):Regex 使用正则表达式加速MongoDB查询,regex,mongodb,mongodb-query,query-performance,Regex,Mongodb,Mongodb Query,Query Performance,我有一个查询可能太复杂了,MongoDB无法快速执行它。如果我可以改变MongoDB的设置方式,我很想知道 下面是一个示例查询,用于在jobs集合中搜索术语“api” 最终,运行32000个文档需要3秒钟以上(摘自MongoDB Profiler): 我想在title、query、description中添加一个索引,但MongoDB只允许每个集合使用一个文本索引,而我有三个字符串字段(title、query、description)进行查询。解决方案是基于三个字段创建一个文本索引。我不知道Mo
我想在title、query、description中添加一个索引,但MongoDB只允许每个集合使用一个文本索引,而我有三个字符串字段(title、query、description)进行查询。解决方案是基于三个字段创建一个文本索引。我不知道Mongo允许您在每个文本索引中使用多个字段。现在开得太快了 您可以用
\b
?此外,由于第一种情况应该是最常见的情况,因此您最有可能将其反转。您可以在任意数量的字段上创建文本索引db.jobs.createIndex({title:“text”,query:“text”,description:“text”})
。试试看它是否能提高您的查询响应时间。在我看来,您需要检查您的正则表达式。和a;)。
db.jobs.find(
{
'budget': {'$exists': true, '$ne': ''},
'$or': [
{'title': /(^|[\\s.,])api.*/gi},
{'query': /api'/gi},
{'description': /(^|[\\s.,])api.*/gi}
]
}
)
"ntoreturn" : 0,
"ntoskip" : 0,
"nscanned" : 0,
"nscannedObjects" : 34266,
"keyUpdates" : 0,
"writeConflicts" : 0,
"numYield" : 274,