2013-03-11 177 views
2

我似乎无法在布尔操作上找到任何有关Mongo聚合的资源。我的查询看起来是这样的(我用的是pymongo司机):

db.collection.aggregate([{'$match': {'foo': 3, 'bar': 'baz'}}, 
          {'$project': {'quxx': 1, '_id': 0, 'count': 1}}, 
          {'$group': {'total': {'$sum': '$count'}, '_id': '$quxx'}}, 
          {'$sort': {'total': -1}}, 
          {'$limit': 2000}]) 

,所有的伟大工程($match是在索引等)。现在,有一个流氓quxx,我想过滤掉管道,所以我认为我会使用$ne运算符。但是,我似乎无法找出正确的方法来做到这一点!我不确定是否我没有把它放在正确的位置(我希望它在$match运营商之后,但在$group运营商之前)或者我的语法错误,但将不胜感激。

至今(全部$match后自己的步骤)我已经试过的事情是:

{'$quxx': {'$ne': 'rogue'}} 
{'quxx': {'$ne': 'rogue'}} 
{'$ne': {'quxx': 'rogue'}} 
{'$ne': {'$quxx': 'rogue'}} 

他们的每一个一个给我unrecognized pipeline op

回答

7

您可以将其放入其自己的$match管道元素中,或者将其包含在初始$match中。

因此,无论添加:

{'$match': {'quxx': {'$ne': 'rogue'}}} 

或修改初始$match到:

{'$match': {'foo': 3, 'bar': 'baz', 'quxx': {'$ne': 'rogue'}}} 
+0

初始匹配遍历一个综合指数,我不希望在quxx指数。这是否意味着我应该与前者一起? – dreamriver 2013-03-11 03:23:36

+1

@dreamriver使用'explain'在相同的'find'上检查修改后的初始匹配,看看你现有的索引是否仍然被使用(我预计它会是)。 – JohnnyHK 2013-03-11 03:25:01