2013-03-11 173 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