问题标签 [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 回答
3207 浏览

mongodb - 使用 MongoDB 聚合框架的自定义管道运算符

实际上,我使用 map reduce 进行一些计算。我不能使用聚合框架来做到这一点,因为我的计算没有可用的管道运算符。

是否可以编写自定义管道运算符?

提前致谢

0 投票
2 回答
3243 浏览

java - Mongodb聚合框架中是否有地板功能?

我尝试在 mongodb 中进行一些整数数学运算,但遇到了一些问题。有没有办法在 mongo db 聚合框架中向上或向下舍入双精度数?

0 投票
2 回答
204 浏览

mongodb - 试图从集合中提取 $first 文档

通过聚合框架传输各种文档后,我终于有了结果文档。

现在的问题是我只想要 $first 和 $last 文档。

最终的文件看起来像这样(巨大的列表):

我用来生成文档的 mongo shell 命令是:
db.talks.aggregate([{$project: {_id: 0, comments: "$comments"}}, {$unwind: "$comments"}, {$group: {_id: "$comments.author", count: {$sum: 1}}}, {$sort: {count: -1}}])

但我只需要第一个和最后一个文件,所以我尝试了这样的事情:
db.talks.aggregate([{$project: {_id: 0, comments: "$comments"}}, {$unwind: "$comments"}, {$group: {_id: "$comments.author", count: {$sum: 1}}}, {$sort: {count: -1}}, {$first: "$_id"}])

我尝试了其他实现,但似乎无法弄清楚何时/何地实现$first$last

有什么建议么?

0 投票
1 回答
5721 浏览

node.js - mongodb聚合框架嵌套数组减法表达式

我有深层嵌套数组,我试图按一些嵌套数组元素进行分组并让它工作。但是,当我尝试使用 $subtract 表达式时,它失败了。任何指针表示赞赏。

似乎最里面的嵌套数组:$scenes.records.timeProfile.timing 没有为 $subtract 正确展开,我尝试 $project 来减少管道中的字段,并尝试使用 $project 和 $group 的各种组合失败。也不止一次尝试放松,没有成功。

0 投票
4 回答
3769 浏览

ruby-on-rails - Mongoid 聚合 $match 与 Date 对象不起作用?

我在具有以下结构的集合中有用户文档:

我可以根据日期轻松查询这些文档:

根据日志:

MOPED: 127.0.0.1:27017 COMMAND 数据库=db 命令={:count=>"users", :query=>{"activities"=>{"$elemMatch"=>{"date_time_created"=>{"$gte" =>2012-05-10 00:00:00 UTC,“$lt”=>2012-07-12 00:00:00 UTC}}}}}(0.5260 毫秒)

我以这种方式得到了我需要的结果。

但是,当我尝试基于相同的条件使用新的聚合函数和 $match 时:

根据日志:

MOPED: 127.0.0.1:27017 COMMAND 数据库=db command={:aggregate=>"users", :pipeline=>[{"$match"=>{:activities=>{"$elemMatch"=>{"date_time_created" =>{"$gte"=>2012 年 5 月 10 日,星期四,"$lt"=>2012 年 7 月 12 日,星期四}}}}}]} (0.6049ms)

“start_date”和“end_date”是 Ruby Date 对象,在两个查询中基本相同。但是,当我查看日志时,它们会变成不同的格式。当我尝试使用 start_date.strftime("%Y-%m-%d") 之类的东西强制格式时,它仍然不起作用。

聚合管道中还有其他功能,但我把它们拿出来,我仍然得到错误。

如何让聚合函数在日期上匹配?

0 投票
0 回答
889 浏览

mongodb - Mongodb聚合和日期操作

考虑一个包含带有日期和计数字段的文档的集合:

我想按周查询计数,所以我必须按截断到一周开始的日期对数据进行分组。但似乎没有办法用 mongodb 聚合框架来实现这一点。

我期待能够做这样的事情($dateOfWeek是一个日期运算符,我想在一周的开始截断日期):

但是我没有找到合适的日期操作员来做这件事。

我知道我可以使用 mapreduce 来做到这一点,但是拥有一个日期运算符而不是编写 javascript 代码会更加优雅。

0 投票
1 回答
1898 浏览

mongodb - Mongo 的聚合命令未充分利用 CPU

我在 i7 八核 CPU 上的 Windows 7 x64 上运行 Mongo 2.2.2。我们的生产服务器在 Red Hat Enterprise 下运行在具有相同版本 Mongo 的 256 核机器上。

在我对 Windows 机器上的以下调用的测试中

我注意到 mongo 未充分利用可用资源。在查询期间,CPU 上的总负载约为 10%。根据 Process Explorer 计算只发生在一个线程中。mongod似乎只使用了我拥有的 8 个内核中的 3 个,甚至它们也被部分使用。

Mongo 的工程师能否解释一下他们对此实现的理由?我很好奇为什么不使用更多可用的资源。为什么不并行处理所有内核的负载,因为您有我要分组的字段的索引。

给定查询是在包含 650 万个文档的集合上执行的(mongobackup 生成 5GB 文件)。所以这没什么疯狂的。

PS。还有一个额外的问题:你考虑过使用 GPU 吗?我的笔记本电脑上有 1024 核 GPU :)

0 投票
1 回答
6889 浏览

mongodb - MongoDb 聚合中的条件展开?

我试图弄清楚是否有一种方法可以在 MongoDB 的聚合框架中编写条件展开。

我有一个这样的聚合命令:

我想按部门添加一个可选过滤器。一个用户可以在一个或多个部门,这是它在数据库中的样子:

用户 _id 性别 salesIndex 部门 {[d1, d2, d3]}

如果我想搜索特定部门的用户,我会编写一个 $unwind 子句,然后按部门编写一个 $match。但是,我想对这两种情况使用相同的聚合命令,如下所示:

这可能吗,还是我需要 2 个聚合命令?

0 投票
2 回答
158 浏览

mongodb - 聚合框架中的组停止正常工作

我讨厌这种问题,但也许你可以指出我很明显。我正在使用 Mongo 2.2.2。

我有一个包含 6M 文档的集合(在副本集中),其中包含名为username的字符串字段,我有索引。该索引不是唯一的,但最近我使它成为唯一的。突然以下查询给了我错误的警报,我有重复。

返回

我用很少的文档在样本集合上测试了这个查询,它按预期工作。

0 投票
2 回答
1922 浏览

mongodb - 使用嵌套操作的 MongoDB 聚合框架 $group

我有几个需要汇总的数字字段。假设我的文档结构如下:

如果我想使用其中一个数字字段将计算字段添加到我的管道中,我可以执行以下操作:

如果我想添加基于其中两个字段的计算字段,我知道我可以这样做:

现在,我的问题是如果我需要做 $numValue1 + $numValue2 + $numValue3 + $numValue4 怎么办?

或者更有趣的是 $numValue1 * ($numValue2 + $numValue3) / $numValue4?