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中执行后查看结果。
相关文章