问题标签 [aggregation-framework]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
1465 浏览

mongodb - 使用聚合框架对所有对象进行分组

我在 MongoDB 中有一组看起来像这样的对象

现在,我希望将所有字段的上述数据按某个字段(可能并不存在于所有对象中)分组,并按最高 created_at 日期对其进行排序。我尝试使用带有以下查询的聚合框架来执行此操作:

我面临的问题与线路有关

如果我输入一些特定的字段,那么它会起作用,但我不知道该集合包含哪些确切的字段。但我希望整个对象像这样返回:

0 投票
2 回答
8303 浏览

node.js - 使用 MongoDB 聚合计算计数和平均值

我有一个简单的数据库布局,如下所示:

我正在尝试编写一个聚合命令来输出我有多少男性和女性客户,我还想输出男性和女性的平均年龄,不确定我可以在同一个命令中执行此操作还是我需要2个单独的吗?

使用上面的代码,我得到了男性/女性的数量,但 avgAge 为 0。有什么想法吗?

非常感谢

0 投票
1 回答
720 浏览

java - MongoDB 数据模型,支持每个事件、每个日期范围的唯一访问者

我有多个网站,每个网站都有访问者“触发”我想要跟踪的多个事件。我有来自所有网站的这些事件的日志,每个事件都填充了网站 ID、事件名称和执行该事件的用户 ID(为了简单起见,假设就是这样)。

要求:

  1. 能够根据网站 ID 和事件名称获取有多少唯一访问者获得了它。
  2. 这也应该支持日期范围(范围内不同的唯一访问者)。

我正在考虑使用以下数据模型(例如)为每个“网站 ID”创建一个集合:

我正在使用 _id 来保存事件 ID。我正在使用 dailyStats._id 来保存它发生的时间(yyyyMMdd 格式的整数)。我使用 dailySattes.users._id 来表示用户的唯一 ID 哈希。

为了获得唯一用户,我基本上应该能够在给定的日期范围内运行(mapreduce?)数组中不同的计数项目(我会将日期范围转换为 yyyyMMdd)。

我的问题:

  1. 这个数据模型对你有意义吗?我担心随着时间的推移这个模型的可扩展性(如果我在某些客户端中有很多每日唯一访问者,它会导致一个巨大的文档)。我正在考虑按 _id < [date as yyyyMMdd] 删除 dailyStats 文档。通过这种方式,我可以将文档大小保持在合理的范围内,但这里仍然存在限制。
  2. 是否有一种简单的方法来运行“upsert”,如果尚未创建也将创建 dailyStats,添加用户(如果尚未创建)并增加两者的“hits”属性?
  3. map-reduce 怎么样?您将如何处理它(需要在给定日期范围内的所有子文档的 users._id 上运行不同)?新的聚合框架有没有更简单的方法?

顺便说一句 - 解决唯一访问者的另一种选择是使用 Redis 位图,但我不确定是否值得持有多个数据存储(维护方面)。

0 投票
4 回答
24316 浏览

mongodb - 使用 mongo 聚合框架按数组的特定元素分组

是否可以使用聚合框架按数组的特定元素进行分组?

这样的文件是这样的:

我可以得到一份最喜欢的食物(即索引为 0 的食物)的不同列表,以及最喜欢食物的最高人的身高?

像这样的东西(尽管它不起作用,因为数组索引访问点符号似乎在聚合框架中不起作用):

0 投票
2 回答
17447 浏览

mongodb - Mongodb聚合数组中的子文档

我正在使用 mongodb 作为后端来实现一个小型应用程序。在这个应用程序中,我有一个数据结构,其中文档将包含一个包含子文档数组的字段。

我使用以下用例作为基础: http ://docs.mongodb.org/manual/use-cases/inventory-management/

从示例中可以看出,每个文档都有一个名为 carted 的字段,它是一个子文档数组。

这非常适合我,除了一个问题:我想计算整个集合中的每个唯一项目(以“sku”作为唯一标识符键),其中每个文档将计数加 1(相同“sku”的多个实例)同一份文件仍将仅计入 1)。例如,我想要这个结果:

{ sku: '00e8da9b', doc_count: 1 }, { sku: '0ab42f88', doc_count: 9 }

在阅读了 MongoDB 之后,当您有如上所述的复杂模式时,我对如何(快速)执行此操作感到非常困惑。如果我正确理解了其他出色的文档,则可以使用聚合框架或 map/reduce 框架来实现此类操作,但这是我需要一些输入的地方:

  • 考虑到结构的复杂性,哪个框架更适合实现我正在寻找的结果?
  • 为了从所选框架中获得最佳性能,首选哪种索引?
0 投票
1 回答
4600 浏览

mongodb - MongoDB 聚合查询

在 MongoDB 中,我有一个集合:

当用户单击 url 时,在 Clicks 数组中添加单击日期的日期。我的问题是如何编写聚合查询,例如获取从 [date1] 到 [date2] 的点击次数并按 UserID 分组?如何将,输出到文件?

谢谢!

0 投票
1 回答
7320 浏览

python - 在此示例中如何使用 Mongodb 聚合?

我目前正在使用 Python 来构建我的许多结果,而不是 MongoDB 本身。我试图了解聚合,但我有点挣扎。这是我目前正在做的一个例子,MongoDB 可能会更好地处理它。

我有一组节目和一组剧集。每个节目都有一个与之关联的剧集列表 (DBRefs)。(剧集存储在它们自己的集合中,因为程序和剧集都非常复杂和深入,因此嵌入是不切实际的)。每集都有一个持续时间(浮动)。如果我想找到一个节目的平均剧集持续时间,我这样做:

当一个节目超过 1000 集时,这非常慢。有没有办法在 MongoDB 中做到这一点?

这是 Mongo shell 格式的一些示例数据。三集属于同一个节目。如何计算节目的平均剧集时长?

0 投票
1 回答
1683 浏览

mongodb - mongodb聚合框架流水线如何工作?

我可能对 mongodb 聚合框架管道的工作方式有一个基本的误解。我的期望是每一步都会消耗前一步的输出。这是一个使用http://media.mongodb.org/zips.json提供的示例集合的具体示例:

产生这样的结果。

到目前为止,一切都很好。然后我决定通过运行添加另一个步骤来获得上述投影:

投影有效,但忽略了第一个 $match 步骤。它基于原始输入,并包含 state != CA 的文档:

是我的期望错位了,还是我一直盯着语法问题而没有看到它?我正在运行 2.2.0 版:

示例查询似乎有效。

提前致谢。

0 投票
2 回答
1206 浏览

mongodb - 如何使用 mongodb 计算附加属性的比率?

使用示例 mongodb 聚合集合 (http://media.mongodb.org/zips.json),我想输出加利福尼亚每个城市的人口份额。

在 SQL 中,它可能如下所示:

这可以使用 mongodb map/reduce 来完成:

这也可以使用新的聚合框架(v2.2)来实现吗?这将需要某种形式的全局范围,如 map/reduce 情况。

谢谢。

0 投票
1 回答
13431 浏览

mongodb - Mongodb 聚合框架 | 双重比赛

这是它的样子 -

  1. 第一场比赛完美无缺。
  2. 该小组工作完美,并推出了我正在寻找的东西。
  3. 最后一个 $match 不起作用并显示所有计数而不是我请求的 >=2

我试过'counts'、'$counts'、“$counts”......但没有一个成功!