Python Mongo 基于数据的过滤器

Python Mongo FIlter based on Data

我正在尝试过滤 mongo 带日期的数据。

为此,我正在使用这些数据集:

def mongo_db(mydict):
    myclient = pymongo.MongoClient("mongodb://localhost:27017/")
    mydb = myclient[<Db name>]
    mycol = mydb[<Collection name>]
    # mydict = {}
    x = mycol.insert_one(mydict)
    # print(x.inserted_id)
    return x.inserted_id

for i in range(1,6):
    mydict = {
    "startsAt": {
        "time": {
            "date": datetime.datetime.today() - timedelta(days = i) + timedelta(hours = i)
        },
        "valid": True
        }
    }

我正在尝试从上面的代码生成数据的示例中过滤某些日期,例如:

"2021-02-09T13:56:09.963000Z"
"2021-02-09T13:56:09.963001Z"

我希望我的结果像 if 2021-02-09 然后只过滤那个。

当我使用这段代码时:

filterCondition = { 
    "startsAt.time.date" : { "$lt" : datetime.datetime.today()},
    "startsAt.time.date" : { "$gt" : datetime.datetime.today() - timedelta(days=1)}
}

mycol.find(filterCondition)

我正在获取当前日期:

"2021-02-10T00:31:47.411000Z"

我只需要过滤昨天和后天的日期。

我试过这种格式:

from_dt = datetime.datetime.strptime('2021-02-10','%Y-%m-%d')
#from_dts = datetime.utcfromtimestamp(from_dt)
to_dt = datetime.datetime.strptime('2021-02-08','%Y-%m-%d')

但运气不好,所以我需要昨天的 24 小时全天结果。我对日期时间感到困惑,昨天是什么时候?意思如果我有记录:

"2021-02-09T13:56:09.963000Z"
"2021-02-09T13:56:09.963001Z"
"2021-02-09T13:56:09.963002Z"
.....

那我只想要这个日期2021-02-09

如果您使用的是原生 BSON 日期,则所有日期都存储为 UTC;因此,如果您想从昨天的 UTC 00:00 搜索到今天的 UTC 00:00,请使用:

today = datetime.date.today()
yesterday = datetime.date.today() - datetime.timedelta(days=1)

start = datetime.datetime.combine(yesterday, datetime.time(0, 0)).replace(tzinfo=pytz.utc)
end = datetime.datetime.combine(today, datetime.time(0, 0)).replace(tzinfo=pytz.utc)

print(list(db.mycollection.find({'date': {'$gte': start, '$lt': end}})))