2016-12-28 46 views
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); 

我該怎麼辦?在此先感謝

回答

1

請參閱aggregate語法http://api.mongodb.com/python/current/examples/aggregation.html 您需要使用[]作爲參數。

+0

OMG my appologize,謝謝你提醒我。順便說一句,我的腳本沒有打印任何語法結果 'cursor = db.transaction.aggregate(match,proj1,proj2,group); 用於光標文檔: print(document);' 你知道爲什麼@Dmitry? –

+0

它在MongoDB shell的情況下工作嗎?嘗試設置'match = {}' – Dmitry

+0

啊謝謝你,我認爲我的關於''transaction_date「部分的腳本:{」$ gt「:datetime(2013,1,1).isoformat()}'仍然是越野車 –