Reputation: 587
Using pymongo v2.6, what it a proper way to write a find query with these conditions:
select * from tasks where processed = 0 AND (process_lock_date is null or process_lock_date < now - 10 minutes) order by date_added asc limit 50
Basically need to write the query to select 50 records that haven't been picked up by a processor yet or haven't been processed and were picked up more than 10 minutes ago (ie pickup unprocessed tasks that were picked up longer time ago and didn't get marked as processed in case previous processor failed)
Any help is appreciated. Thank you.
Upvotes: 1
Views: 68
Reputation: 103445
You need to import the timedelta and datetime objects first to create a date object that represents the datetime 10 minutes ago, use that object for you mongodb query as follows:
from datetime import timedelta
date = datetime.datetime.now() - datetime.timedelta(minutes=10)
docs = db.collection.find(
{
'processed': 0,
'$or': [
{'process_lock_date': {'$lt': date}},
{'process_lock_date': null}
]
}).sort({'date_added': 1}).limit(50)
for doc in docs:
print(doc)
Upvotes: 1