Python - Mongoengine: 日期范围查询

问题描述 投票:0回答:1

我对python中的mongoDb比较陌生,所以请大家帮助我创建了一个名为waste的集合,我想对给定的开始和结束日期进行范围查询。

class Waste(Document):
    meta = {'collection': 'Waste'}
    item_id = IntField(required=True)
    date_time_record = DateTimeField(default=datetime.utcnow)
    waste_id = IntField(unique=True, required=True)
    weight = FloatField(required= True)

我想对一个给定的开始和结束日期做一个范围查询:我已经尝试了下面的查询。

start = datetime(start_year, start_month, start_day)
end = datetime(end_year, end_month, end_day)
kwargs['date_time_record'] = {'$lte': end, '$gte': start}
reports = Waste.objects(**kwargs).get()

但我一直得到错误信息: DoesNotExist: Waste matching query does not exist.

被发送的日期值为。

{
    "start_year": 2020,
    "start_month" : 5,
    "start_day" : 10,
    "end_year": 2020,
    "end_month" : 5,
    "end_day" : 20
}

当我试图从集合中获取第一个对象时,json的输出是:

{"_id": {"$oid": "5ebbcf126fdbb9db9f74d24a"}, "item_id": 96387295, "date_time_record": {"$date": 1589366546870}, "waste_id": 24764942, "weight": 32546.0}

添加了一个$date,我无法解读日期字段中的数字。但当我用mongo compass看数据时,看起来还不错。snapshot of the document to be found

在给定的日期范围内存在一条记录,所以我无法理解我到底哪里出错了。

python mongodb mongodb-query mongoengine
1个回答
1
投票

我通过使用Q:我使用的查询来实现这个工作。

reports = Waste.objects((Q(date_time_record__gte=start) & Q(date_time_record__lte=end)))

回答是:

[{"_id": {"$oid": "5ebbcf126fdbb9db9f74d24a"}, "item_id": 96387295, "date_time_record": {"$date": 1589366546870}, "waste_id": 24764942, "weight": 32546.0}]
© www.soinside.com 2019 - 2024. All rights reserved.