在pymongo查询中使用 $group 和 $match(带日期范围)函数
我正在尝试在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
现在我尝试按用户所属的组织进行分组,并使用了以下MongoDB的聚合查询
>>> 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}}})
有没有人能告诉我我哪里出错了??
附言:我对MongoDB还很陌生
1 个回答
1
其实是反过来的。你需要先匹配这些项目
user.aggregate([
{"$match": {'timeCreated':{ "$gte":date_yesterday, "$lt":date_today } }},
{'$group':{'_id': "$organization",'count':{"$sum": 1 } }}
])
另外要注意,因为这是一个“管道”,像$group
或$project
这样的操作是“破坏性”的,也就是说它们只会输出你实际指定的字段。