python和mongodb交互

前言

MongoDB是常用的非关系型数据库,在开发中经常用到。本文介绍MongoDB和Python结合使用的用法。

在Python代码中使用MongoDB数据库,首先需要安装第三方库:

cmd 复制代码
pip install pymongo

示例代码:

python 复制代码
# 导包
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}}

基本查询

查询集合中的第一条记录:

python 复制代码
db.find_one()

查询所有数据:

python 复制代码
db.find()

查询结果只显示某些字段,0表示不显示,1表示显示:

默认情况下 _id 字段是显示的,其他字段是不显示的。

python 复制代码
db.find({}, {"_id": 0, "name": 1, "age": 1})

条件查询:

python 复制代码
# 查询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': '经理'}})

聚合查询

以性别分组:

python 复制代码
db.aggregate([
	{"$group": {"_id": "$gender"}}  # 以性别分组
])

'''
{'_id': '女'}
{'_id': '男'}
'''

以性别分组,分组后年龄求和:

python 复制代码
db.aggregate([
	{"$group": {"_id": "$gender", "sum_age": {"$sum": "$age"}}}  # 以性别分组,分组后年龄求和
])

'''
{'_id': '男', 'sum_age': 294.0}
{'_id': '女', 'sum_age': 271.0}
'''

以性别分组,分组后求个数(出现的次数):

python 复制代码
db.aggregate([
    {"$group": {"_id": "$gender", "count": {"$sum": 1}}}
])

"""
{'_id': '女', 'count': 10}
{'_id': '男', 'count': 10}
"""

以性别分组,分组后年龄求平均值:

python 复制代码
db.aggregate([
    {"$group": {"_id": "$gender", "avg_age": {"$avg": "$age"}}}
])

'''
{'_id': '女', 'avg_age': 27.1}
{'_id': '男', 'avg_age': 29.4}
'''

以性别分组,分组后把年龄放到一起:

python 复制代码
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 计数
相关推荐
love530love1 天前
LiveTalking 数字人项目 Windows 部署完全指南(EPGF 架构)
人工智能·windows·python·架构·livetalking·epgf
遇事不決洛必達1 天前
【Python基础】GIL 锁是什么及其对爬虫的影响
爬虫·python·线程·进程·gil锁
CryptoPP1 天前
快速对接东京证券交易所API数据:实战指南与代码示例
开发语言·人工智能·windows·python·信息可视化·区块链
探物 AI1 天前
把 MambaOut 塞进 YOLOv11:会有什么样的反应
python·yolo·计算机视觉
如竟没有火炬1 天前
最大矩阵——单调栈
数据结构·python·线性代数·算法·leetcode·矩阵
阳区欠1 天前
【LangChain】LLM基础介绍
开发语言·python·langchain
Cosolar1 天前
保姆级 CrewAI 教程:从零构建多智能体协作系统
人工智能·python·架构
GDAL1 天前
使用 uv 管理 Python 版本
python·uv·版本
真实的菜1 天前
Redis 从入门到精通(十二):典型业务场景实战 —— 排行榜、限流器、秒杀系统、Session 共享
数据库·redis·python
cup111 天前
[开源] Meta Assistant / 告别命令行,我为一堆 Python 脚本做了一个 Windows 任务栏的“家”
windows·python·工具·nuitka·脚本运行