使用Regex加速MongoDB查询

时间:2017-01-13 22:19:24

标签: regex mongodb mongodb-query query-performance

我有一个查询可能太复杂,MongoDB无法快速执行它。如果我可以改变我的MongoDB设置方式,我很想知道!

以下是搜索作业集合中的术语“api”

的示例查询
db.jobs.find(
  {
    'budget': {'$exists': true, '$ne': ''}, 
    '$or': [
      {'title': /(^|[\\s.,])api.*/gi}, 
      {'query': /api'/gi}, 
      {'description': /(^|[\\s.,])api.*/gi}
    ]
  }
)

最终需要超过3秒才能运行32000个文档(摘自MongoDB Profiler):

"ntoreturn" : 0,
"ntoskip" : 0,
"nscanned" : 0,
"nscannedObjects" : 34266,
"keyUpdates" : 0,
"writeConflicts" : 0,
"numYield" : 274,

我正在考虑在标题,查询,描述上添加索引,但MongoDB只允许每个集合使用一个文本索引,而我有三个字符串字段(标题,查询,描述),我正在查询。

1 个答案:

答案 0 :(得分:0)

解决方案是创建一个基于3个字段的文本索引。我不知道Mongo允许你为每个文本索引使用多个字段。现在超级快!