如何检索两个字段中的所有文档' pymongo的价值等于?

时间:2015-11-26 17:38:20

标签: python mongodb mongodb-query pymongo aggregation-framework

我有一个MongoDB集合,我想使用python提取所有日期字段小于其他日期字段的文档。

我知道如何在robomongo中执行此操作:

db.getCollection('myCollection').find({'date1' : {'$lt' : ISODate(this.date2)}})

但是当我使用pymongo时,这不起作用。我尝试使用datetime代替ISODate,但没有运气。

编辑:date1和date2都是字段'名称

关于如何解决它的任何想法?

2 个答案:

答案 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只会让事情变得更好。