У меня есть схема Мангуста, которая имеет 4 свойства для нескольких таблиц лидеров (каждая таблица лидеров по songId):
{
u: {
type: String,
unique: false,
required: true,
alias: 'userId'
},
n: {
type: String,
unique: false,
required: true,
alias: 'name'
},
s: {
type: String,
unique: false,
required: true,
alias: 'songId'
},
sc: {
type: Number,
unique: false,
required: true,
alias: 'score'
}
}
Для данного songId я должен получить 10 лучших пользователей (отсортировать по количеству баллов), идля заданного списка songId и userIds я должен получить список 10 лучших пользователей для списка (сортировка по баллам).
Вот мои индексы:
Score.index({ u: 1, s: -1 }, { unique: true });
Score.index({ s: 1 }, { unique: false });
И вот 2 запроса соответственно:
const worldPromise = Score.find({ s: songId }).sort({ sc: -1 }).limit(10).exec();
const friendsPromise = Score.find({ s: songId, u: { $in: friendsArr } }).sort({ sc: -1 }).limit(10).exec();
где friendsArr в массиве идентификаторов и sondId - это идентификатор песни.
Мой вопрос заключается в том, правильно ли оптимизированы и проиндексированы мои запросы, или я должен сделать что-то по-другому?