雖然elasticsearch的聚合功能很好很強(qiáng)大驰唬,但是對于一般的小項(xiàng)目,mongodb的聚合功能也是堪用的腔彰。
mongodb的聚合類似于管道操作叫编,通過多個構(gòu)件來組成一個管道:filter, project, group, sort, limit, skip。
sort, limit, skip在普通查詢中也是經(jīng)常使用的命令霹抛,這里主要介紹前面三個構(gòu)建的使用宵溅。
比如要查找field1或field2正則匹配某個字符串,然后對field3, field3進(jìn)行分組并統(tǒng)計出現(xiàn)的次數(shù)上炎,可以按如下來搞:
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)