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 计数
相关推荐
2301_8152795210 分钟前
CSS定位如何实现多行文字垂直居中_通过绝对定位模拟表格
jvm·数据库·python
m0_6845019814 分钟前
C#怎么使用LINQ Contains包含判断 C#如何用Contains实现类似SQL IN查询的集合包含判断【语法】
jvm·数据库·python
程序媛徐师姐24 分钟前
Python基于深度学习的手写输入识别系统【附源码、文档说明】
python·深度学习·python深度学习·手写输入识别系统·python手写输入识别系统·python手写输入识别·深度学习手写输入识别
2301_7641505631 分钟前
c++如何读取和解析带BOM头的UTF-8与UTF-16文本流【详解】
jvm·数据库·python
qq_4240985634 分钟前
HTML函数开发用窄边框笔记本有优势吗_便携与性能权衡【指南】
jvm·数据库·python
Wyz2012102437 分钟前
CSS如何实现导航栏下划线随鼠标移动_利用-hover伪类与过渡动画控制
jvm·数据库·python
2201_7610405938 分钟前
SQL如何统计每个用户的首次行为时间_MIN聚合与分组
jvm·数据库·python
qq_1898070344 分钟前
mysql如何实现定时清理缓存数据_利用event scheduler执行
jvm·数据库·python
Polar__Star1 小时前
golang如何实现低功耗设备唤醒机制_golang低功耗设备唤醒机制实现教程
jvm·数据库·python
a9511416421 小时前
CSS怎么在flex布局中实现项目均分间距_设置justify-content space-evenly
jvm·数据库·python