Python中使用MongoDB进行数据聚合的基本操作
- 连接MongoDB数据库
在Python中使用MongoDB之前,需要先连接MongoDB数据库。可以使用pymongo库连接MongoDB。示例代码如下:
from pymongo import MongoClient client = MongoClient() db = client['mydb']
其中,'mydb'是数据库名称。如果MongoDB是在本地运行,不需要传入参数,直接使用client = MongoClient()
连接。如果MongoDB运行在远程服务器上,需要传入MongoDB的地址和端口号,例如:client = MongoClient('mongodb://<host>:<port>/')
。如果MongoDB需要认证,还需要传入用户名和密码,例如:client = MongoClient('mongodb://<user>:<password>@<host>:<port>/')
。
- 筛选
MongoDB中常用的筛选操作有$match
、$project
、$limit
、$skip
等。其中,$match
用于筛选符合条件的文档,$project
用于选择文档的某些字段,$limit
用于限制返回的文档数量,$skip
用于跳过某些文档。例如,假设有如下数据:
{ "name": "Peter", "age": 20, "address": { "city": "Shanghai", "street": "Xuhui" } } { "name": "John", "age": 25, "address": { "city": "Shanghai", "street": "Minhang" } } { "name": "Mary", "age": 30, "address": { "city": "Beijing", "street": "Haidian" } }
要筛选出年龄大于等于25岁的人,可以使用如下代码:
pipeline = [ { "$match": {"age": {"$gte": 25}} } ] result = db.my_collection.aggregate(pipeline)
其中,my_collection
是集合名称。$match
操作符用于筛选年龄大于等于25岁的文档。
要选择出姓名和年龄字段,可以使用如下代码:
pipeline = [ { "$project": {"name": 1, "age": 1, "_id": 0} } ] result = db.my_collection.aggregate(pipeline)
其中,"_id": 0
表示不展示MongoDB自动生成的_id字段。
- 分组
MongoDB中使用$group
操作符进行分组。例如,假设有如下数据:
{ "name": "Peter", "age": 20, "address": { "city": "Shanghai", "street": "Xuhui" } } { "name": "John", "age": 25, "address": { "city": "Shanghai", "street": "Minhang" } } { "name": "Mary", "age": 30, "address": { "city": "Beijing", "street": "Haidian" } }
要按照城市对文档进行分组,并计算每个城市的年龄平均值,可以使用如下代码:
pipeline = [ { "$group": {"_id": "$address.city", "avg_age": {"$avg": "$age"}} } ] result = db.my_collection.aggregate(pipeline)
其中,"$address.city"
表示按照地址中的城市字段进行分组,"$age"
表示对年龄字段求平均值。
- 排序
MongoDB中使用$sort
操作符进行排序。例如,假设有如下数据:
{ "name": "Peter", "age": 20, "address": { "city": "Shanghai", "street": "Xuhui" } } { "name": "John", "age": 25, "address": { "city": "Shanghai", "street": "Minhang" } } { "name": "Mary", "age": 30, "address": { "city": "Beijing", "street": "Haidian" } }
要对文档按照年龄从小到大排序,可以使用如下代码:
pipeline = [ { "$sort": {"age": 1} } ] result = db.my_collection.aggregate(pipeline)
其中,1
表示按照升序排序,-1
表示按照降序排序。
示例代码:
from pymongo import MongoClient client = MongoClient() db = client['mydb'] # 筛选操作 pipeline = [ { "$match": {"age": {"$gte": 25}} }, { "$project": {"name": 1, "age": 1, "_id": 0} } ] result = db.my_collection.aggregate(pipeline) for item in result: print(item) # 分组操作 pipeline = [ { "$group": {"_id": "$address.city", "avg_age": {"$avg": "$age"}} } ] result = db.my_collection.aggregate(pipeline) for item in result: print(item) # 排序操作 pipeline = [ { "$sort": {"age": 1} } ] result = db.my_collection.aggregate(pipeline) for item in result: print(item)
以上代码可以在MongoDB中执行后查看结果。
相关文章