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 计数
相关推荐
少废话h1 分钟前
解决Flink中ApacheCommonsCLI版本冲突
开发语言·python·pycharm
serve the people3 分钟前
TensorFlow 图执行(tf.function)的 “非严格执行(Non-strict Execution)” 特性
人工智能·python·tensorflow
天命码喽c4 分钟前
GraphRAG-2.7.0整合Milvus-2.5.1
开发语言·python·milvus·graphrag
吴佳浩3 小时前
LangChain 深入
人工智能·python·langchain
网安-轩逸5 小时前
回归测试原则:确保软件质量的基石
自动化测试·软件测试·python
Mr_Xuhhh5 小时前
YAML相关
开发语言·python
咖啡の猫5 小时前
Python中的变量与数据类型
开发语言·python
汤姆yu6 小时前
基于springboot的电子政务服务管理系统
开发语言·python
执笔论英雄6 小时前
【RL】python协程
java·网络·人工智能·python·设计模式
帮帮志7 小时前
【AI大模型对话】流式输出和非流式输出的定义和区别
开发语言·人工智能·python·大模型·anaconda