2016-12-13 2 views
0

Я хочу вернуть общее количество документов в коллекции mongodb за последние 30 дней и в течение одного года на основании ValidationDate. Вот мои выборочные данныеPymongo Обратные документы

{ 
    "_id": { 
     "$oid": "570480d5d487dd2c577a4d5f" 
    }, 
    "ValidationDate": { 
     "$date": "2016-04-05T22:00:03.335Z" 
    }, 
    "DataRaw": " HF 13300100032016-03-30 23:40:05+0000+ 12.03+ 4.376+ 1387.00 0.0", 
    "ReadingsAreValid": true, 
    "locationID": " HF 133", 
    "Readings": { 
     "BatteryVoltage": { 
      "value": " 0.0" 
     }, 
     "pH": { 
      "value": 4.376 
     }, 
     "SensoreDate": { 
      "value": { 
       "$date": "2016-03-30T23:40:05.000Z" 
      } 
     }, 
     "temperature": { 
      "value": 12.03 
     }, 
     "Conductivity": { 
      "value": 1387 
     } 
    }, 
    "HMAC": "0f38675cac8b3b761225c80b7441df36ddc4911ff30405835d7803dcde15d0b8" 
} 

Вот мой код

из PyMongo импорта Подключение от даты и времени импорта DateTime

def main(): 
    conn = Connection() 

    db = conn.cloudtest 

    data = db.test_5_27 
    print data.find({"ReadingsAreValid":True}).count() 

if __name__ == "__main__": 
    main() 

код возвращает общее количество документов в коллекции, но я буду как знать, как группировать их в соответствии с последними 30 днями и последними один год на основе ValidationDate.

+0

Соединение было удалено из PyMongo на некоторое время, вы должны обновить его до последней PyMongo и использовать MongoClient. –

ответ

0

Что-то вроде этого:

import datetime 

from pymongo import MongoClient 

data = MongoClient().cloudtest.test_5_27 

now = datetime.datetime.utcnow() 
last_30d = now - datetime.timedelta(days=30) 
last_year = now.replace(year=now.year - 1) 

since_last_month = data.find({ 
    "ReadingsAreValid": True, 
    "ValidationDate": {"$gte": last_30d} 
}).count() 

since_last_year = data.find({ 
    "ReadingsAreValid": True, 
    "ValidationDate": {"$gte": last_year} 
}).count()