所以说我有一个这样的模式
const ServerSchema = new mongoose.Schema<ServerModel>({
serverId: { type: String },
users: {
type: Map,
of: UserSchema
}
});
const UserSchema = new mongoose.Schema<UserModel>({
userId: { type: String },
score: { type: Number }
});
我有多台服务器,每台服务器都包含一张用户地图。到目前为止,这种模式是有意义的,对我而言似乎还很干净,我需要了解的关于Server
的所有内容都在Server
集合下。但是现在我试图创建一个查询来查找给定服务器中得分最高的10位用户。在这里,我会遇到一些有关执行此操作的正确方法的问题,这使我对当前的架构提出了疑问。据我所知,我需要针对当前架构执行以下操作
function getTop10Score(serverId) {
let server = ServerModel.findOne({ serverId }, { users: 1 })
let users = server.get('users');
let sortedUsers = users.sort(// sort by score)
return first 10 from sortedUsers
}
这似乎可行,但我看到了2个问题
所以我在想
A。使用当前的模式可以创建这种单一查询,我只是对查询不了解如何做到这一点,或者
B。我应该创建另一个集合来表示服务器中用户的分数。像
const UserScoreSchema = ...({
serverId: { type: String },
userId: { type: String },
score: { type: Number }
})
然后创建一个查询来执行我想要的事情似乎很简单。
任何人都认为哪种方法最惯用?