Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB-数据库设计和统计数据计算问题_Mongodb_Database Design_Mongoose_Nosql_Nosql Aggregation - Fatal编程技术网

MongoDB-数据库设计和统计数据计算问题

MongoDB-数据库设计和统计数据计算问题,mongodb,database-design,mongoose,nosql,nosql-aggregation,Mongodb,Database Design,Mongoose,Nosql,Nosql Aggregation,我目前正面临MongoDB的一个问题,这可能是由于我的模式设计,但我不确定如何解决这个问题 所以基本上我有这个集合(mongoose模式): 结果Arrya在这里用作键值字典,其中键是_id。换句话说,所有文档将共享这些子文档_id(这些子文档由客户端生成) 此集合可以并且将在相同(球员、球队、比赛、联盟、运动类型)组合中产生多个结果。因此,在查询时,我需要根据这些属性(或其中的一个子集)对数据进行分组,并需要对每个结果的值求和 我在这个收藏中可能有数百万张唱片 示例: 因此,如果我有两条pla

我目前正面临MongoDB的一个问题,这可能是由于我的模式设计,但我不确定如何解决这个问题

所以基本上我有这个集合(mongoose模式):

结果Arrya在这里用作键值字典,其中键是_id。换句话说,所有文档将共享这些子文档_id(这些子文档由客户端生成)

此集合可以并且将在相同(球员、球队、比赛、联盟、运动类型)组合中产生多个结果。因此,在查询时,我需要根据这些属性(或其中的一个子集)对数据进行分组,并需要对每个结果的值求和

我在这个收藏中可能有数百万张唱片

示例: 因此,如果我有两条player=0的记录,并且我想查询该玩家的统计数据,那么我只会得到一个结果,结果数组被“合并”,值由值键(result.\u id)求和

这在某种程度上是可行的,但我的问题是如何获得具有最高值的前5-10个最大对(玩家,…,结果._id)?当前的解决方案需要我多次查询数据库,每次查询一个结果。\u id; 关于我正在努力实现的目标的更多信息:

PlayerStatsCollection根据存储在结果数组中的一组事件拥有数据。我想用这些事件来计算基于一系列标准的排名。例如,我希望能够查询在给定日期范围内谁是具有最高(事件类型)的玩家。我还希望能够查询在特定日期范围内,谁是x队中具有最高级别(事件类型)和最高级别的球员

我还想过创建一个二级集合(例如mapReduce),将排名存储在一个单独的集合中,但我不知道这将如何支持我需要的查询类型

我不想要一个完整的解决方案,但只是一些关于如何设计/解决这个问题的建议,也许我遗漏了一些东西,或者在我的思考过程中有一些我没有注意到的缺陷

欢迎提出任何建议

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" } }
        }
      }