假设我有一个像这样的数组
pipeline = [
{
"$group": {
"_id": {
"cohort_name": "$CohortMonthYear",
"segment_name": "$SegmentName",
"driver_name": "Operating Expense"
},
"cohort_list": {
"$push": {
"driver_value": "$Operating Expense",
"mob_value": "$MonthsOnBooks"
}
}
}
},
{
"$group": {
"_id": {
"cohort_name": "$CohortMonthYear",
"segment_name": "$SegmentName",
"driver_name": "Other fee per active"
},
"cohort_list": {
"$push": {
"driver_value": "$Other fee per active",
"mob_value": "$MonthsOnBooks"
}
}
}
}
]
我想通过数组中的每个管道聚合Collection。如何在不需要迭代数组然后聚合单个管道的情况下执行此操作?
收集架构:
{
"_id" : ObjectId("56cea0de29beab9b1128142e"),
"SegmentName" : "Transactor-High-Super Prime",
"Segment_Behaviour" : "Transactor",
"Segment_Usage" : "High",
"Segment_Risk" : "Super Prime",
"CohortMonthYear" : "01-01-2010",
"CohortQuarterYear" : "Q1 2010",
"MonthsOnBooks" : 1,
"Accounts" : 5400,
"Active rate" : 0.6102349013766621,
"Purchase per active" : 489.9747013271109495,
"BT per active" : 270.3482080015934343,
"CA per active" : 1.0073548882354659,
"AMF per active" : 0.0046451682730326,
"Late and Overlimit fee per active" : 0.0032395984480145,
"Other fee per active" : 7.9199489691490577,
"Purchase APR" : 0,
"BT APR" : 0.0300000000000000,
"Cash APR" : 0.1763020000000000,
"Interchange Rate" : 0.0142100000000000,
"Payment Rate" : 0,
"BT Fee Rate" : 0.0291840000000000,
"Cash advance fee rate" : 0.0328347765703207,
"Unit loss rate" : 0.0000000000000000,
"Balance Control Ratio" : 2.2999868799572565,
"Cost of Funds" : 0.0281148836230321,
"Marketing Cost" : 125.6961196036371575,
"Operating Expense" : 0.8725128657629959,
"Yield" : 0.0000000000000000,
"ADB" : 12.3296052310066617,
"portfolio_id" : ObjectId("56ce9f92c95a8a459ba0c580")
}
我目前的方法概述如下。这种方法的问题是它非常慢。
for template in pipeline:
PortfolioData.objects(portfolio_id=self.portfolio_id).aggregate(template,
allowDiskUse=True)
有没有办法做这样的事情?
PortfolioData.objects(portfolio_id=self.portfolio_id).aggregate(pipeline,
allowDiskUse=True)