我有一个猫鼬模式,该模式具有多个排行榜的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 });
这分别是两个查询:
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();
其中ids和sondId数组中的friendsArr是歌曲ID。
我的问题是我的查询是否被优化和正确索引,还是应该做一些不同的事情?