python和mongodb交互
前言
MongoDB是常用的非关系型数据库,在开发中经常用到。本文介绍MongoDB和Python结合使用的用法。
在Python代码中使用MongoDB数据库,首先需要安装第三方库:
pip install pymongo
示例代码:
# 导包
import pymongo# 创建连接
mongo_client = pymongo.MongoClient(host='localhost', port=27017)# 连接数据库和集合 database1是数据库名称 t2是集合名称
db = mongo_client['database1']['t2']# 查询
results = db.find()# 遍历查询结果
for item in results:print(item)
| 语法 | 操作 | 格式 |
|---|---|---|
| $eq | 等于 | {:} |
| $lt | 小于 | {: {$lt:}} |
| $lt | 小于或等于 | {: {$lte:}} |
| $lt | 大于 | {: {$gt:}} |
| $lt | 大于或等于 | {: {$gte:}} |
| $lt | 不等于 | {: {$ne:}} |
| $lt | 且 | {$and: [{}, {}]} |
| $lt | 或 | {$or: [{}, {}]} |
| $lt | 在范围内 | {age: {$in: [val1, val2]}} |
| $lt | 不在范围内 | {age: {$nin: [val1, val2]}} |
基本查询
查询集合中的第一条记录:
db.find_one()
查询所有数据:
db.find()
查询结果只显示某些字段,0表示不显示,1表示显示:
默认情况下 _id 字段是显示的,其他字段是不显示的。
db.find({}, {"_id": 0, "name": 1, "age": 1})
条件查询:
# 查询age字段值是28的数据
res = db.find({'age': 28})# 查询age字段值大于28的数据
res = db.find({'age': {'$gt': 28}})# 查询age字段值大于28的数据,并按照年龄从小到大排序,1是从小到大,-1是从大到小
res = db.find({'age': {'$gt': 28}}).sort({'age': 1})# 查询age字段值大于28,并且city字段的值是深圳的数据(同时满足2个条件)
res = db.find({'$and': [{'age': {'$gt': 28}},{'city': '深圳'}
]})# 查询age字段值大于30,或者city字段的值是深圳的数据(满足任意一个条件即可)
res = db.find({'$or': [{'age': {'$gt': 30}},{'city': '深圳'}
]})# 查询occupation字段值包含经理的数据(正则表达式-模糊查询)
res = db.find({'occupation': {'$regex': '经理'}})
聚合查询
以性别分组:
db.aggregate([{"$group": {"_id": "$gender"}} # 以性别分组
])'''
{'_id': '女'}
{'_id': '男'}
'''
以性别分组,分组后年龄求和:
db.aggregate([{"$group": {"_id": "$gender", "sum_age": {"$sum": "$age"}}} # 以性别分组,分组后年龄求和
])'''
{'_id': '男', 'sum_age': 294.0}
{'_id': '女', 'sum_age': 271.0}
'''
以性别分组,分组后求个数(出现的次数):
db.aggregate([{"$group": {"_id": "$gender", "count": {"$sum": 1}}}
])"""
{'_id': '女', 'count': 10}
{'_id': '男', 'count': 10}
"""
以性别分组,分组后年龄求平均值:
db.aggregate([{"$group": {"_id": "$gender", "avg_age": {"$avg": "$age"}}}
])'''
{'_id': '女', 'avg_age': 27.1}
{'_id': '男', 'avg_age': 29.4}
'''
以性别分组,分组后把年龄放到一起:
results = self.db.aggregate([{"$group": {"_id": "$gender","age": {"$push": "$age"}}}
])'''
{'_id': '男', 'age': [28.0, 32.0, 35.0, 27.0, 26.0, 24.0, 28.0, 34.0, 29.0, 31.0]}
{'_id': '女', 'age': [25.0, 29.0, 22.0, 31.0, 33.0, 30.0, 26.0, 23.0, 27.0, 25.0]}
'''
| 名称 | 描述 |
|---|---|
| $avg | 求平均值 |
| $min | 求最小值 |
| $max | 求最大值 |
| $sum | 求和 |
| $push | 放到一起 |
| $count | 计数 |
