繁体   English   中英

按日期范围过滤的多个MongoDB集合的汇总和总和数据

[英]Aggregate and Sum Data from mutliple MongoDB Collections filtered by date range

我有跨三个集合的数据,需要生成一个数据集,以汇总这些集合中的数据,并按日期范围进行过滤。

集合是:

db.games
{
 _id : ObjectId,
 startTime : MongoDateTime
}

db.entries
{
 player_id : ObjectId,   // refers to db.players['_id']
 game_id : ObjectId      // refers to db.games['_id']
}

db.players
{
 _id : ObjectId,
 screen_name,
 email
}

我想返回一个集合,该集合是玩家在指定范围内的游戏条目数。 输出如下所示:

output
{
  player_id,
  screen_name,
  email,
  sum_entries
}

我认为我需要先在日期范围内创建一个游戏集合,并与所有条目合并,然后汇总条目总数,最后输出包含玩家数据的集合,这似乎有很多步骤,但我没有确定如何去做。

遇到这些问题的原因是因为您尝试将MongoDB用作关系数据库,而不是面向文档的数据库。 由于许多MongoDB无法执行任何JOIN操作,因此标准化许多集合上的数据通常会适得其反。 当您嵌套了将其他对象嵌入数组而不是引用它们的文档时,MongoDB会更好地工作。 在MongoDB中组织数据的一种更好的方法是让每个game都有参与其中的player数组,或者让每个player其中的game拥有数组。这也不一定是错误的在这些数组中有一些多余的附加数据,例如名称,而不仅仅是ID。

但是现在您遇到了问题,所以让我们看看如何处理它。

就像我说的那样,MongoDB不执行JOIN。 无法一次访问多个集合中的数据。

您可以做的一件事就是以编程方式解决问题。 创建一个程序,该程序获取所有players ,然后获取每个players所有entries ,然后获取startTime匹配的条目所引用的games

您可以尝试的另一件事是MapReduce MapReduce可用于将结果附加到另一个集合。 您可以尝试对每个相关集合使用一个MapReduce作业,然后查询结果集合。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM