0
我試圖用pymongo來算幾個交易這樣創建一個腳本:聚合使用Pymongo在每日分組
{
"_id" : ObjectId("58437604a966aec46dfa249f"),
"transaction_id" : 282932121,
"transaction_serial_number" : "GtgT46A",
"transaction_date" : ISODate("2015-09-28T00:00:00Z"),
"card_type" : "MC",
"transaction_nominal" : 3500
}
...
我成功聚集直接使用MongoDB的這些數據,這裏是抽樣結果:
{
"_id" : {
"card_type" : "MC",
"date" : ISODate("2015-09-28T00:00:00Z")
},
"count" : 179011
}
但是,我沒有使用pymongo彙總這些數據,就有了一個錯誤
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "script_aggregate.py", line 84, in <module>
cursor = db.transaction.aggregate(match, proj1, proj2, group);
TypeError: aggregate() takes exactly 2 arguments (5 given)
這是我的腳本:
from datetime import datetime
from pymongo import MongoClient
client = MongoClient('localhost', 27017)
db = client['mydb']
collection = db['transaction']
match={"$match" : {
"transaction_date" : { "$gt" : datetime(2013,1,1).isoformat() }
}
};
proj1={"$project" : {
"_id" : 0,
"transaction_date" : 1,
"card_type" : 1,
"h" : {
"$hour" : "$transaction_date"
},
"m" : {
"$minute" : "$transaction_date"
},
"s" : {
"$second" : "$transaction_date"
},
"ml" : {
"$millisecond" : "$transaction_date"
}
}
};
proj2={"$project" : {
"_id" : 0,
"card_type" : 1,
"transaction_date" : {
"$subtract" : [
"$transaction_date",
{
"$add" : [
"$ml",
{
"$multiply" : [
"$s",
1000
]
},
{
"$multiply" : [
"$m",
60,
1000
]
},
{
"$multiply" : [
"$h",
60,
60,
1000
]
}
]
}
]
}
}
};
group={"$group" : {
"_id" : {
"card_type" : "$card_type",
"date" : "$transaction_date"
},
"count" : {
"$sum" : 1
}
}
};
cursor = db.transaction.aggregate(match, proj1, proj2, group);
for document in cursor:
print(document);
我該怎麼辦?在此先感謝
OMG my appologize,謝謝你提醒我。順便說一句,我的腳本沒有打印任何語法結果 'cursor = db.transaction.aggregate(match,proj1,proj2,group); 用於光標文檔: print(document);' 你知道爲什麼@Dmitry? –
它在MongoDB shell的情況下工作嗎?嘗試設置'match = {}' – Dmitry
啊謝謝你,我認爲我的關於''transaction_date「部分的腳本:{」$ gt「:datetime(2013,1,1).isoformat()}'仍然是越野車 –