【发布时间】:2018-06-10 22:12:33
【问题描述】:
再次希望得到帮助.. 我想将现有聚合从“仅查找每种类型的最小值和最大值”更改为“查找最小值并计算每种类型的所有其他值的差异”。但我目前不知道如何将它们合并在一起。我可以分别查询两者并在 nodejs 中以某种方式进行计算,但我想知道这应该如何在 mongo 聚合中完成。
给定以下数据
{ departement : 'C_TG', type : 'FLAT_1', offer: 500, req: 495 }
{ departement : 'D_TG', type : 'FLAT_1', offer: 422, req: 420 }
{ departement : 'F_TG', type : 'FLAT_1', offer: 600, req: 480 }
{ departement : 'C_TG', type : 'FLAT_7', offer: 900, req: 889 }
{ departement : 'D_TG', type : 'FLAT_7', offer: 601, req: 500 }
{ departement : 'F_TG', type : 'FLAT_7', offer: 600, req: 590 }
{ departement : 'C_TG', type : 'FLAT_4', offer: 601, req: 599 }
{ departement : 'D_TG', type : 'FLAT_4', offer: 755, req: 735 }
{ departement : 'F_TG', type : 'FLAT_4', offer: 600, req: 590 }
我试图找出“最少”报价(对于每种类型(例如 FLAT_1))与所有文档(相同类型)的区别。
因此,有必要
- 对于每种类型(例如 FLAT_1),
- 查找此类型的最低报价(FLAT_1,在本例中为来自“部门:'D_TG'”的“报价:422”)
- 把这个“least_offer 和它的 minimum_offer_departement”放到内存中...
-
...能够计算所有相同类型(FLAT_1)集合的差异
(this.docs.req-least offer)/(least offer/100) = 百分比差异
- 并打印所有文档,包括 minimum_offer + least_offer_departement + 差异
预期的结果最终会是这样的
{ type : "FLAT_1", least_offer : 422, least_offer_departement : "D_TG", departement : "C_TG", req: 495, diff : 17.29 }
{ type : "FLAT_1", least_offer : 422, least_offer_departement : "D_TG", departement : "F_TG", req: 480, diff : 13.74 }
{ type : "FLAT_1", least_offer : 422, least_offer_departement : "D_TG", departement : "D_TG", req: 420 , diff : -0.47 }
{ type : "FLAT_7", least_offer : 600, least_offer_departement : "F_TG", departement : "C_TG", req: 889, diff : 48.16 }
{ type : "FLAT_7", least_offer : 600, least_offer_departement : "F_TG", departement : "F_TG", req: 590, diff : -1.66 }
{ type : "FLAT_7", least_offer : 600, least_offer_departement : "F_TG", departement : "D_TG", req: 500, diff : -16.66 }
{ type : "FLAT_4", least_offer : 600, least_offer_departement : "F_TG", departement : "C_TG", req: 599, diff : -0.16 }
{ type : "FLAT_4", least_offer : 600, least_offer_departement : "F_TG", departement : "F_TG", req: 590, diff : -1.66 }
{ type : "FLAT_4", least_offer : 600, least_offer_departement : "F_TG", departement : "D_TG", req: 735, diff : 22.5 }
最好的问候,西蒙
【问题讨论】:
-
真的不清楚你在问什么。现有的聚合是按类型“分组”的,结果现在与原始文档没有任何关系。甚至百分比都不清楚。也许您应该尝试通过说明从“原始状态”到“最终所需状态”的数据组织中需要发生什么来进行逻辑解释。如果您不了解所有聚合管道术语和用法,那么您只是通过尝试解释如何使用它们来混淆问题。只需解释需要对数据进行哪些处理即可。
-
早上好,请道歉,让我试着把它说清楚。我想要实现的基本上是,对于每种类型(例如类型:“FLAT_1”),最低报价(例如报价:422)被用作计算与 all 更高的差异的基础请求(例如 req: 590)。结果应包括两者之间的百分比差异和部门。所以结果,“offer”的部门总是一样的,因为它是offer最少的部门。我希望这有助于使它更清楚?最好的问候
-
不,它并没有使它更清晰。您被要求"edit your question" 并“通过示例”展示您希望如何根据源数据获得结果。问题中已经出现的单词并不清楚。添加更多的单词并不能使它更清楚。花点时间让问题尽可能清晰。另见stackoverflow.com/help/how-to-ask
标签: mongodb aggregation