我有一个MongoDB集合,我想使用python提取所有日期字段小于其他日期字段的文档。
我知道如何在robomongo
中执行此操作:
db.getCollection('myCollection').find({'date1' : {'$lt' : ISODate(this.date2)}})
但是当我使用pymongo
时,这不起作用。我尝试使用datetime
代替ISODate,但没有运气。
编辑:date1和date2都是字段'名称
关于如何解决它的任何想法?
答案 0 :(得分:2)
从API pages,您可以使用
d = datetime.datetime(2009, 11, 12, 12)
collection.find({"date": {"$lt": d}})
答案 1 :(得分:2)
您需要使用.aggregate()
方法来访问聚合管道和$redact
运算符。
pipeline = [
{'$match': {'date1': {'$exists': True}, 'date2': {'$exists': True}}},
{'$redact': {'$cond': [{'$lt': ['$date1', '$date2']}, '$$KEEP', '$$PRUNE']}}
]
collection.aggregate(pipeline)
$redact
将使用$$KEEP
返回符合条件的所有文档,并使用$$PRUNE
变量丢弃那些不匹配的文档。
$match
阶段是可选的,但很好。它只是一个初步过滤,它限制了下一阶段将要处理的文件数量。此外,$redact
会进行集合扫描,因此$match
只会让事情变得更好。