简体   繁体   中英

Python - Mongoengine: date range query

I am relatively new to mongoDb in python, so kindly help I have created a collection called 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)

I want to do a range query for a given start and end date: I have tried the following query:

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()

But I keep getting the error: DoesNotExist: Waste matching query does not exist.

the date value being sent as:

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

when I try to get the first object from the collection, the output in json is:

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

a $date is added and I am unable to decipher the numbers in the date field. But when I look at the data using the mongo compass it looks just fine: 要找到的文档的快照

There exist a record in the given date range so I am unable to understand where am I going wrong.

I got this working by using Q: the query I used is

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

The response is:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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