在pymongo查询中使用$ group和$ match(具有日期范围)函数

时间:2014-07-10 09:33:31

标签: python mongodb aggregation-framework pymongo

我试图在Mongodb中执行以下sql查询

select organization from users
group by organization 
having 2014-07-10 > date > 2014-07-10

(我知道如果SQL语法是否正确,但我希望我已经给出了一个粗略的我在这里尝试做什么)

首先我试着看看昨天添加了多少用户

>>> users.find({u"timeCreated":{"$gte":date_yesterday, "$lt":date_today}}).count()
6

现在我尝试按照他们所属的组织对用户进行分组,并使用以下monogo聚合查询

>>> user.aggregate([{'$group':{'_id': "$organization",'count':{"$sum":1}}},{"match":{u'timeCreated':{"$gte":date_yesterday, "$lt":date_today}}}])

结果是

{u'ok': 1.0, u'result':[]}

这不是这样的查询。

我甚至尝试使用以下查询来获取今天之前的所有条目

>>> user.aggregate([{'$group':{'_id': "$organization",'count':{"$sum":1}}},{"match":{u'timeCreated':{"$lt":date_today}}}])

但输出保持不变。

以下命令正常工作并提供组织列表

>>> user.aggregate({'$group':{'_id': "$organization",'count':{"$sum":1}}})

任何人都可以告诉我,我要去哪里吗?

P.S。我是mongoDB的新手

1 个答案:

答案 0 :(得分:1)

反过来说。您想先匹配项目

user.aggregate([
   {"$match": {'timeCreated':{ "$gte":date_yesterday, "$lt":date_today } }},
   {'$group':{'_id': "$organization",'count':{"$sum": 1 } }}
])

另请注意,因为这是"管道" $group $project 等操作具有破坏性"并且只发出你实际指定的字段。