2016-12-28 12 views
0

Я пытаюсь создать скрипт, используя PyMongo сосчитать несколько сделку так:Aggregation Использование PyMongo В Daily Группировка

{ 
    "_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

См. Синтаксис aggregatehttp://api.mongodb.com/python/current/examples/aggregation.html Для аргументов необходимо использовать [].

+0

OMG, извините, спасибо, что напомнили мне. BTW, мой скрипт не печатал никакого результата из синтаксиса 'cursor = db.transaction.aggregate (match, proj1, proj2, group); для документа в курсоре: print (document); ' Знаете ли вы, почему @Dmitry? –

+0

Работает ли это в случае оболочки MongoDB? Попытайтесь установить 'match = {}' – Dmitry

+0

А я благодарю, что мой скрипт в разделе '" transaction_date ": {" $ gt ": datetime (2013,1,1) .isoformat()}' по-прежнему не работает –