【发布时间】:2017-09-05 19:13:22
【问题描述】:
我有这样一个文档集合:
{ _id: 1, Meters: { gasmeter: 1000.0 } }
{ _id: 2, Meters: { gasmeter: 1007.0 } }
{ _id: 3, Meters: { gasmeter: 1010.0 } }
我正试图了解煤气表元素之间的区别:
{ difference: 7 } // Difference between _id=1 and _id=2
{ difference: 3 } // Difference between _id=2 and _id=3
我试过了:
db.MeterData.aggregate([{$project: { item: 1, difference: {$subtract: [ {$add: [ "$Meters.gasmeter","$Meters.gasmeter" ] }, "$Meters.gasmeter" ] }}}])
但这不起作用。我仍然得到相同的值。
知道如何使用 mongodb 进行聚合吗?
【问题讨论】:
-
您不能对来自聚合框架中不同文档的值进行操作。对于“小而琐碎”的示例,您可以
$push将所有文档放入一个数组中,并使用$reduce现在在“单个”文档结果中迭代数组值。但是你在这里真正谈论的是更自然地用“光标迭代”来完成。因为您只需保留游标中读取的最后一个文档的值,并使用变量中存储的值对下一个文档进行计算。不是你要求数据库直接返回的东西。 -
我明白,但是使用大数据集的迭代是不是太昂贵了? (谈论大约 100k 的文件)
-
您要求的是“每个文档之间的差异”。这不像你要求服务器减少任何东西。它仍然是 100K 文件。您只需要返回具有您希望知道的值的属性。这是非常合乎逻辑的,因此您需要仔细考虑。这不是“聚合”。
标签: mongodb mongodb-query aggregation-framework