Python MongoDB执行查询
我有MongoDB的疑问:Python MongoDB执行查询,python,mongodb,pymongo,Python,Mongodb,Pymongo,我有MongoDB的疑问: 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_numb
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"}
}
})
我正在尝试使用Pymongo执行,但不起作用,错误是:
Error: connection not established pipeline must be a list
完成该工作的功能是:
def execute_agregation(self, query, collection_name):
result = None
try:
collection = self._instance.db[collection_name]
result = collection.aggregate(query)
print(result)
except Exception as error:
print('Error: connection not established {}'.format(error))
return None
else:
return result
在下一条指令中调用:
result = mongo_conn.execute_agregation(mongo_query, "transacciones")
mongo_conn是一个名为mongo的类的实例。您的聚合管道需要设置为一个阶段列表。因此,在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"}
}
}
])
需要将聚合管道设置为阶段列表。因此,在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"},
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"}
}
}])
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"}
}
}]
#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
我认为这里有两个问题 1.我们需要按照@Mahesh Nayak的建议,使用方括号将骨料管道定义为阶段
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"}
}
}])
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"}
}
}]
#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
由于和,我得到了函数执行\u agregion的近似解:
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]
但是它现在不起作用,在这种情况下。多亏了和,我得到了函数的近似解执行\u agregion:
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]
但是现在不行,就这样