соответствующих полей документов в моей коллекции является следующим:MongoDB запрос по одному индексу, сортировок по antoher
{
point: {
type: Point,
coordinates: [15.6446464, 45.231323]
}
score: 24
}
У меня есть 2dsphere
индекса на point
и «нормальный», нисходящий индекс по score
. Я хочу, чтобы выполнить следующий запрос:
db.properties.find({point: {$geoWithin: <some polygon> }}).sort({score: -1}).limit(2000)
Есть ли способ сделать Монго использовать индекс point
для find
части, а затем индекс score
для сортировки?
В коллекции имеется около 700 тыс. Документов, часть поиска может возвращать десятки тысяч документов, каждая из которых имеет до МБ.
Текущая проблема заключается в том, что при использовании индекса point
размер возвращаемой коллекции слишком велик для сортировки в памяти. При использовании индекса score
запрос выполняется слишком медленно из-за последовательного сканирования по координатам.
Я пробовал делать составной индекс, но это не поможет мне, потому что 'point' уникален почти для каждого документа, поэтому' score' будет технически случайным. –
Вы говорите, что использование индекса для сортировки подмножества данных технически невозможно? У меня было такое чувство, но я не мог найти объяснения. –
Нет, вы не можете использовать отдельный индекс для подмножества данных. Что касается составного ключа, испытали ли вы это? Я ожидал бы, что составной ключ будет самым быстрым в этом сценарии. – Jaco