如何正确编写此查询

时间:2015-05-31 03:32:40

标签: mongodb python-2.7 pymongo

使用pymongo v2.6,用这些条件编写查询查询的正确方法是什么:

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

基本上需要编写查询来选择50个记录,这些记录尚未被处理器拾取或尚未处理并且在10分钟前被拾取(即拾取未经处理的未完成任务的时间较长以前的处理器失败,并没有被标记为处理过程)

感谢任何帮助。谢谢。

1 个答案:

答案 0 :(得分:1)

您需要首先导入timedelta和datetime对象以创建表示10分钟前日期时间的日期对象,然后使用该对象进行mongodb查询,如下所示:

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)