问题标签 [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 投票
1 回答
11496 浏览

mongodb - Mongo聚合框架,排序然后分组不起作用

我正在尝试先按日期对数据进行排序,然后在另一个字段上分组。这对我不起作用。

我要回答的问题是:选择最近的不同 cid?

鉴于此数据:

我首先在圆圈上进行匹配,然后在日期上进行排序,然后在 cid 上进行分组

我得到的结果:

以下是我的分析:

在按日期匹配或排序之前,数据为:

按日期排序后,数据集将是:

所以分组后,我期望的结果是:

什么查询可以解决我的问题?

为什么当前查询对我不起作用?

0 投票
1 回答
819 浏览

php - Mongodb按列聚合/分组并计算特定列

我们已经设置了一个将事件写入 mongo 实例的基本应用程序。这是一个示例写入:

我们想做的是检索按 URL 分组的结果和某些 event_id 的计数。像 event_grouping_a 可能由 event_ids 1,6,35 组成,而 event_grouping_b 可能由 2,66,103 组成。示例输出如下所示:

关于如何执行这种类型的聚合/分组的任何想法?最终目标是在 PHP 中使用它,但我在 mongod 控制台中搞砸了,但无济于事。我可以让它按 URL 分组,但我不能让它在单个父 URL 下显示两种事件类型。它吐出这样的东西:

以上两个应该合并为1,但我一生都无法弄清楚......有什么建议吗?

0 投票
1 回答
1928 浏览

php - MongoDB 聚合在 PHP 中不起作用(或非常慢)并且在 shell 中完美运行?

我正在尝试对我的集合(包含超过 20M 个文档)使用聚合方法。

我首先在 Windows shell 中尝试过:

它运行良好,几秒钟后返回结果。

当我在 PHP 中“翻译”它时:

我收到超时 PHP 致命错误:

我不知道我的 PHP 代码是否出错,或者 PHP 中的聚合应该比 shell 慢得多?

另外,我在“名字”字段上添加了一个索引,以使查询更快。

顺便说一句,有没有办法将这种调用的超时设置为无穷大?

非常感谢你的帮助 !

0 投票
3 回答
28291 浏览

mongodb - Mongodb聚合计数数组/集合大小

这是我的问题:

模型:

{应用程序:“abc”,日期:Time.now,状态:“1” user_id:[id1,id2,id4]}

{应用程序:“abc”,日期:Time.yesterday,状态:“1”,user_id:[id1,id3,id5]}

{应用程序:“abc”,日期:Time.yesterday-1,状态:“1”,user_id:[id1,id3,id5]}

我需要计算一段时间内的唯一用户ID数。

预期结果:

{ 应用程序:“abc”,状态:“1”,unique_id_count:5 }

我目前正在使用聚合框架并计算 mongodb 之外的 id。

{ $match: { application: "abc" } }, { $unwind: "$users" }, { $group: { _id: { status: "$status"}, users: { $addToSet: "$users" } } }

我的用户 ID 数组非常大,所以我必须迭代日期,否则我将获得最大文档限制 (16mb)。

我也可以 $group by

{ 年: { $year: "$date" }, 月: { $month: "$date" }, 日: { $dayOfMonth: "$date" }

但我也得到了文档大小限制。

是否可以计算 mongodb 中的设置大小?

谢谢

0 投票
1 回答
1178 浏览

php - MongoDB 在 PHP 中聚合,将秒数添加到日期/时间

我有一个MongoDB聚合PHP定义为:

问题是$add聚合函数$project不起作用。

在日期/时间字段中添加任意秒数的正确方法是什么$executed

谢谢。

0 投票
2 回答
19090 浏览

mongodb - 在嵌套文档 MongoDB 中求和

我正在尝试对一组文档中的一些值求和,但没有运气。

这是文件

db.Cuentas.find().pretty()

所以,我需要“Usuario”的“Egresos”中所有“Monto”的总和:“MarioCares”。在这个例子中 154000

使用聚合我使用这个:

但我总是得到

我究竟做错了什么 ?

警察局已经看到了这个这个

0 投票
1 回答
1206 浏览

mongodb - MongoDB聚合框架按数组长度排序

给定以下数据集:

如何将此 python/pymongo 排序转换为可与 MongoDB 聚合框架一起使用的东西?我正在根据codes数组中的代码数量对结果进行排序。

python 中有效,我只想知道如何在 MongoDB 查询端实现相同的目标。

0 投票
1 回答
1332 浏览

mongodb - MongoDB 2.2 中的 MongoDB 聚合框架中的 $group 是多线程的吗?

我想知道 MongoDB 2.2 聚合框架中的 $group 函数是否是多线程的。

对于这个问题,我做了一些小测试。我使用的数据集用于存储大约 400 万封电子邮件,每封电子邮件的格式如下:

我设计了一个查询来查找一天、一周、一个月、半年和一年内的所有电子邮件。然后按“bot”字段对结果进行分组。

我使用聚合框架和 java 驱动来做到这一点。Java代码如下:

结果如下所示:

令我惊讶的是,通常一年以上的组应该比一天慢,因为它包含更多记录。(数据集中的记录随时间均匀分布)

如果我只使用 db.spams.find({"date":{$gt:ISODate(xxx), {$lt: xxx}}}).count,我可以看到查询一年比查询一天花费更长的时间。

但是为什么当我使用 $group 时,当我扩大时间范围时,这个函数需要几乎相同的时间?

我知道聚合框架是用 C++ 编写的,我使用的是 mongodb 2.2,聚合框架是否使用了多线程或其他一些方法来提高性能?

0 投票
1 回答
2253 浏览

mongodb - MongoDB聚合结果缓存

我在 mongodb 中有一个相当大的集合,大约有 100 000 个文档(未分片)。这是一个 Web 应用程序的后端,基本上只允许用户浏览不同的方式来查看此集合中的相同信息。

对于其中一个视图,我尝试使用聚合框架计算字段的出现次数。这意味着聚合整个集合。问题是这种聚合操作(这是一个简单的分组、排序和限制管道)需要 2 秒,这对于 Web 应用程序来说太慢了。

所以我的问题是;为了缓存此聚合操作的结果,首选解决方案是什么?据我发现,不可能“聚合成”一个新的集合,或者类似的东西。目前我发现的唯一解决方案是将整个结果读入一个变量,然后使用 insert 将此变量插入一个新集合中 - 但我担心这涉及从数据库发送大量数据 => 到我的应用程序 =>回到数据库?

有什么建议么?

管道示例:

架构基本上是这 3 个字段 + 一些真正不相关的字段,即:

我在 item_id 和所有 3 个字段上都尝试了索引,但没有成功。

0 投票
1 回答
1404 浏览

mongodb - Mongo 在多个字段上选择不同的 + 通用架构

我目前正在学习 MongoDB,但遇到了一些问题。

对于一个项目,我使用的是 SQL,我有 3 个表:Artist、Album、Song。

然后我决定换成 Mongo,因为我有很多行,也因为我很好奇......

在 Mongo 中,我只有一首合集 Song,其中包含所有内容:

  • 曲目名称
  • 艺术家姓名
  • 艺术品
  • 文件夹
  • 专辑名
  • 专辑日期

首先我想知道这个结构是否正确,或者我是否应该为我在 SQL 中拥有的每个表创建集合?我的主要目标是能够搜索 artistName="something" 和 trackName="something_else"... 通过简单的查找,它的工作速度非常快!:)

但是,我还需要一个页面来显示所有艺术家及其链接(文件夹),这是我的问题:我想显示所有艺术家,按艺术家姓名排序,以 A 开头(例如)并获取每个艺术家的文件夹。 ..

我试过这个:

这工作正常,但我需要folder..

然后我尝试了这个:

没有排序但排序我有以下错误:

所以我的问题是做我需要的最好的方法是什么?

非常感谢,瓦伦丁