简体   繁体   English

MongoDB 最近 30 天数据

[英]MongoDB last 30 days data

I have this data in a mongo database,我在 mongo 数据库中有这些数据,

{
    "_id": {
        "$oid": "5654a8f0d487dd1434571a6e"
    },
    "ValidationDate": {
        "$date": "2015-11-24T13:06:19.363Z"
    },
    "DataRaw": " WL 00100100012015-08-28 02:44:17+0000+ 16.81 8.879  1084.00",
    "ReadingsAreValid": true,
    "locationID": " WL 001",
    "Readings": {
        "pH": {
            "value": 8.879
        },
        "SensoreDate": {
            "value": {
                "$date": "2015-08-28T02:44:17.000Z"
            }
        },
        "temperature": {
            "value": 16.81
        },
        "Conductivity": {
            "value": 1084
        }
    },
    "HMAC": "ecb98d73fcb34ce2c5bbcc9c1265c8ca939f639d791a1de0f6275e2d0d71a801"
}

My goal is to calculate temperature, ph and conductivity values that satisfy a given range for the last 30 days but i am getting an error which i have not been able to resolve while searching online.我的目标是计算过去 30 天内满足给定范围的温度、ph 值和电导率值,但我遇到了一个错误,我在网上搜索时无法解决这个错误。 Here is my code.这是我的代码。

import datetime
from pymongo import MongoClient


def total_data_push():
    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": False}, {"ValidationDate": {"$gte": last_30d}},
        {"Readings.temperature.value": {"$gt": 1.0}}).count()

    print since_last_month

def main():
    total_data_push()

if __name__ == "__main__":
    main()

When i run the script without the ValidationDate piece, it returns correct values but adding this data component to get that for last 30 days returns the following error当我在没有 ValidationDate 片段的情况下运行脚本时,它会返回正确的值,但添加此数据组件以获取过去 30 天的数据会返回以下错误

traceback (most recent call last):
  File "total_data_push.py", line 29, in <module>
    main()
  File "total_data_push.py", line 26, in main
    total_data_push()
  File "total_data_push.py", line 17, in total_data_push
    {"Readings.temperature.value": {"$gt": 1.0}}).count()
  File "/Library/Python/2.7/site-packages/pymongo/collection.py", line 866, in find
    return Cursor(self, *args, **kwargs)
  File "/Library/Python/2.7/site-packages/pymongo/cursor.py", line 90, in __init__
    raise TypeError("skip must be an instance of int")
TypeError: skip must be an instance of int

What am i really missing here?我在这里真的错过了什么? thanks for your help in advance提前感谢您的帮助

As said @BenCr, if you look at find signature :正如@BenCr 所说,如果您查看find签名

find(filter=None, projection=None, skip=0, limit=0, no_cursor_timeout=False, cursor_type=CursorType.NON_TAILABLE, sort=None, allow_partial_results=False, oplog_replay=False, modifiers=None, manipulate=True) find(filter=None,projection=None,skip=0,limit=0,no_cursor_timeout=False,cursor_type=CursorType.NON_TAILABLE,sort=None,allow_partial_results=False,oplog_replay=False,modifiers=None,操纵=True)

The filter is the first parameter as the following : filter是第一个参数,如下所示:

since_last_month = db.data.find({
    "ReadingsAreValid": False,
    "ValidationDate": {"$gte": last_30d},
    "Readings.temperature.value": {"$gte": 1.0}
    }).count()

This filter should like:这个过滤器应该是:

since_last_month = db.data.find({
"ReadingsAreValid": False,
"ValidationDate": {"$gte": last_30d},
"Readings.temperature.value": {"$gte": 1.0}
}).count()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM