У меня есть запрос, который может быть слишком сложным для быстрого выполнения MongoDB. Если есть что-то, что я могу изменить в настройке моей MongoDB, я бы хотел знать!
Вот пример запроса, который ищет в коллекции вакансий термин «api».
db.jobs.find(
{
'budget': {'$exists': true, '$ne': ''},
'$or': [
{'title': /(^|[\\s.,])api.*/gi},
{'query': /api'/gi},
{'description': /(^|[\\s.,])api.*/gi}
]
}
)
В итоге для обработки 32000 документов требуется более 3 секунд (выдержка из MongoDB Profiler):
"ntoreturn" : 0,
"ntoskip" : 0,
"nscanned" : 0,
"nscannedObjects" : 34266,
"keyUpdates" : 0,
"writeConflicts" : 0,
"numYield" : 274,
Я думал добавить индекс для заголовка, запроса, описания, но MongoDB допускает только один текстовый индекс для каждой коллекции, в то время как у меня есть три строковых поля (заголовок, запрос, описание), которые я запрашиваю.