【发布时间】:2014-04-18 01:43:27
【问题描述】:
我希望在将 mongo db 中的一些记录传递给聚合函数之前对其进行操作。特别是,在对这些属性进行求和之前,我需要对集合的一些属性进行求和。
属性的总和最初不能在聚合查询中完成,因为属性名称在原始集合中有所不同。例如,我从以下内容开始:
{ timestamp: 1346774400000, foo3: 12, foo45: 13, foo9: 2 },
{ timestamp: 1346796000000, foo7: 33, foo2: 5 }
我需要修改每个文档以汇总以“foo”开头的每个属性的值,然后汇总集合中每个文档的所有这些值。
我为此编写了一个地图操作,它会产生如下内容:
{ timestamp: 1346774400000, foo_total: 27 },
{ timestamp: 1346796000000, foo_total: 38 }
...但我无法对 db.collection.map() 的输出执行聚合函数。
有什么方法可以做到这一点,或者有更好的方法吗?我无法更改文档的现有结构,并且我想避免执行 map reduce 操作,并且我不想将此操作卸载到代码中。
【问题讨论】:
-
目前还不清楚您的最终结果是什么。实际上,您只是说要“聚合”,但您没有说明实际聚合的方式或结果。无论如何,如果您有不同的属性名称,那么 mapReduce 可能会更好地处理您的整个操作。您不能在不明确知道它们是什么的情况下操作聚合管道中的字段名称。或者没有蛮力。
-
我的错,我知道打开包装可能有点困难。我需要获取每个 foo_total 值并对所有文档求和。在提供的示例中,我的最终结果将是 27 + 38 或 65。
标签: mongodb mongodb-query aggregation-framework