我有一个 MongoDB 集合,我想使用 python 提取某些日期字段小于其他日期字段的所有文档。
我知道如何在 robomongo
中做到这一点:
db.getCollection('myCollection').find({'date1' : {'$lt' : ISODate(this.date2)}})
但是当我使用 pymongo
时这不起作用。我尝试使用 datetime
而不是 ISODate,但没有成功。
编辑:date1 和 date2 都是字段名
有什么解决办法吗?
最佳答案
您需要使用 .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
只会让事情变得更好。
关于python - 如何检索两个字段值与 pymongo 相等的所有文档?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33944407/