MongoDB-数据库设计和统计数据计算问题
我目前正面临MongoDB的一个问题,这可能是由于我的模式设计,但我不确定如何解决这个问题 所以基本上我有这个集合(mongoose模式): 结果Arrya在这里用作键值字典,其中键是_id。换句话说,所有文档将共享这些子文档_id(这些子文档由客户端生成) 此集合可以并且将在相同(球员、球队、比赛、联盟、运动类型)组合中产生多个结果。因此,在查询时,我需要根据这些属性(或其中的一个子集)对数据进行分组,并需要对每个结果的值求和 我在这个收藏中可能有数百万张唱片 示例: 因此,如果我有两条player=0的记录,并且我想查询该玩家的统计数据,那么我只会得到一个结果,结果数组被“合并”,值由值键(result.\u id)求和 这在某种程度上是可行的,但我的问题是如何获得具有最高值的前5-10个最大对(玩家,…,结果._id)?当前的解决方案需要我多次查询数据库,每次查询一个结果。\u id; 关于我正在努力实现的目标的更多信息: PlayerStatsCollection根据存储在结果数组中的一组事件拥有数据。我想用这些事件来计算基于一系列标准的排名。例如,我希望能够查询在给定日期范围内谁是具有最高(事件类型)的玩家。我还希望能够查询在特定日期范围内,谁是x队中具有最高级别(事件类型)和最高级别的球员 我还想过创建一个二级集合(例如mapReduce),将排名存储在一个单独的集合中,但我不知道这将如何支持我需要的查询类型 我不想要一个完整的解决方案,但只是一些关于如何设计/解决这个问题的建议,也许我遗漏了一些东西,或者在我的思考过程中有一些我没有注意到的缺陷 欢迎提出任何建议MongoDB-数据库设计和统计数据计算问题,mongodb,database-design,mongoose,nosql,nosql-aggregation,Mongodb,Database Design,Mongoose,Nosql,Nosql Aggregation,我目前正面临MongoDB的一个问题,这可能是由于我的模式设计,但我不确定如何解决这个问题 所以基本上我有这个集合(mongoose模式): 结果Arrya在这里用作键值字典,其中键是_id。换句话说,所有文档将共享这些子文档_id(这些子文档由客户端生成) 此集合可以并且将在相同(球员、球队、比赛、联盟、运动类型)组合中产生多个结果。因此,在查询时,我需要根据这些属性(或其中的一个子集)对数据进行分组,并需要对每个结果的值求和 我在这个收藏中可能有数百万张唱片 示例: 因此,如果我有两条pla
const PlayerStatsCollection = {
sportType: MongoId,
player: MongoId,
match: MongoId,
team: MongoId,
date: Date,
league: MongoId,
results: {
_id: MongoId,
value: String,
name: String
}
};
{
$match: {
team: args.home
}
},
{
$group: {
_id: {
player: "$player",
team: "$team",
rankId: "$results._id"
},
value: { $sum: "$value" }
}
},
{
$group: {
_id: {
player: "$_id.player",
team: "$_id.team"
},
stats: { $addToSet: { attribute: "$id.rankId", value: "$value" } }
}
}