雖然elasticsearch的聚合功能很好很強大,但是對于一般的小項目,mongodb的聚合功能也是堪用的。
mongodb的聚合類似于管道操作,通過多個構件來組成一個管道:filter, project, group, sort, limit, skip。
sort, limit, skip在普通查詢中也是經常使用的命令,這里主要介紹前面三個構建的使用。
比如要查找field1或field2正則匹配某個字符串,然后對field3, field3進行分組并統計出現的次數,可以按如下來搞:
import pymongo
db_cli = pymongo.MongoClient(host=mongo_host, port=mongo_port)
coll = db_cli["my_test"]["test_coll"]
aggs = [
{"$match": {"$or" : [{"field1": {"$regex": "regex_str"}}, {"field2": {"$regex": "regex_str"}}]}},
{"$project": {"field3":1, "field4":1}},
{"$group": {"_id": {"field3": "$field3", "field4":"$field4"}, "count": {"$sum": 1}}},
]
result = coll.aggregate(pipeline=aggs)