您的聚合管道需要设置为阶段列表。因此,使用方括号来表示JSON中的数组。
mongo_query = db.transacciones.aggregate([
{
$project :
{
month : {$month : "$day"},year : {$year : "$day"},pr_avg_rate : 1,pr_avg_rate_approved : 1,pr_numbers : 1,pr_numbers_approved : 1,pr_total_amount : 1,pr_total_amount_approved : 1
}
},{
$group : {
_id : {month : "$month",year : "$year" },pr_avg_rate : {$avg : "$pr_avg_rate"},pr_avg_rate_approved : {$avg : "$pr_avg_rate_approved"},pr_numbers : {$sum : "$pr_numbers"},pr_numbers_approved : {$sum : "$pr_numbers_approved"},pr_total_amount : {$sum : "$pr_total_amount"},pr_total_amount_approved : {$sum : "$pr_total_amount_approved"}
}
}
])
,
我认为这里有两个问题
1.我们需要使用@Mahesh Nayak建议的方括号将聚合管道定义为阶段
mongo_query = db.transacciones.aggregate([
{
$project :
{
month : {$month : "$day"},pr_total_amount_approved : {$sum : "$pr_total_amount_approved"}
}
}])
- 第二个函数问题,您正在传递集合名称和查询,但已经查询了mongodb游标。
您必须按如下所示修改查询
query = [
{
$project :
{
month : {$month : "$day"},pr_total_amount_approved : {$sum : "$pr_total_amount_approved"}
}
}]
#Or modify your function as below
def execute_agregation(self,query):
result = None
try:
result = query
print(result)
except Exception as error:
print('Error: connection not established {}'.format(error))
return None
else:
return result
,
由于Mahesh Nayak和Anil Kumar Gupta,我为函数 execute_agregation 得到了一个近似解决方案:
def execute_agregation(self,query,collection_name):
result = None
try:
collection = self._instance.db[collection_name]
pipeline = [
{
"$project" :
{
"month" : {"$month" : "$day"},"year" : {"$year" : "$day"},"pr_avg_rate" : 1,"pr_avg_rate_approved" : 1,"pr_numbers" : 1,"pr_numbers_approved" : 1,"pr_total_amount" : 1,"pr_total_amount_approved" : 1
}
},{
"$group" : {
"_id" : {"month" : "$month","year" : "$year" },"pr_avg_rate" : {"$avg" : "$pr_avg_rate"},"pr_avg_rate_approved" : {"$avg" : "$pr_avg_rate_approved"},"pr_numbers" : {"$sum" : "$pr_numbers"},"pr_numbers_approved" : {"$sum" : "$pr_numbers_approved"},"pr_total_amount" : {"$sum" : "$pr_total_amount"},"pr_total_amount_approved" : {"$sum" : "$pr_total_amount_approved"}
}
}
]
# print(pipeline)
result = collection.aggregate(pipeline)
# print(result)
except Exception as error:
print('Error: connection not established {}'.format(error))
return None
else:
return result
但是现在,我正在尝试使用名为query的变量,它是具有以下结构的字符串:
"{'$project': {'month': {'$month': '$day'},'year': {'$year': '$day'},'pr_avg_rate': 1,'pr_avg_rate_approved': 1,'pr_numbers': 1,'pr_numbers_approved': 1,'pr_total_amount': 1,'pr_total_amount_approved': 1}},{'$group': {'_id': {'month': '$month','year': '$year'},'pr_avg_rate': {'$avg': '$pr_avg_rate'},'pr_avg_rate_approved': {'$avg': '$pr_avg_rate_approved'},'pr_numbers': {'$sum': '$pr_numbers'},'pr_numbers_approved': {'$sum': '$pr_numbers_approved'},'pr_total_amount': {'$sum': '$pr_total_amount'},'pr_total_amount_approved': {'$sum': '$pr_total_amount_approved'}}}"
我想将查询放入
之类的管道数组中
pipeline = [query]
但是这种方式目前不起作用。
本文链接:https://www.f2er.com/3147595.html