Python操作MongoDB数据库

404 阅读1分钟

简介

MongoDB是由C++语言编写的,基于分布式文件存储的开源NoSQL数据库系统。在Python中调用pymongo库可以实现对MongoDB数据库的操作,其操作代码与原生指令非常相似,可以移步到MongoDB的基础操作,来查看MongoDB的详细操作指令。

1. 安装PyMongo

Win+R键入cmd,输入以下指令即可安装PyMongo:

pip install pymongo

2. 连接MongoDB

# 从pymongo库导入MongoClient
from pymongo import MongoClient

# 输入主机:端口号(如果连接的是集群,则需要将每个连接以数组的形式传入)
client = MongoClient('localhost:27017')

# 如果数据库设置了密码,则还需要输入以下信息才能连接
auth = client['认证数据库']
auth.authenticate('用户名', '密码')

# 查看数据库信息
client.server_info()

3. 文档的插入、更新和删除

# 选择数据库/集合(若没有相应的数据库/集合,系统会自动创建)
db = client['pymongo']
col = db['cellphone']

# 向该集合中插入一些文档
col.insert_many([
    {'brand':'apple','name':'iphone12','type':['mini','standard','pro','max'],'price':5299},
    {'brand':'apple','name':'iphone11','type':['standard','pro','max'],'price':4599},
    {'brand':'huawei','name':'mate40','type':['standard','pro','plus'],'price':4999},
    {'brand':'huawei','name':'p40','type':['standard','pro','plus'],'price':3999},
    {'brand':'huawei','name':'mate30','type':['standard','pro'],'price':3899},
    {'brand':'xiaomi','name':'xiaomi11','type':['young','standard','pro'],'price':3699},
    {'brand':'samsung','name':'s20','type':['standard','pro','plus'],'price':4299}
])

# 将所有'name'='iphone12'的'price'改为9999
col.update_many({'name':'iphone12'},
                {'$set':{'price':9999}})
                
# 将所有'brand'='apple'的文档删除
col.delete_many({'brand':'apple'})

# 删除'cellphone'集合
col.drop()

# 删除'pymongo'数据库
db.dropDatabase

4. 文档查询

目标:查询'price'介于4000~5000之间的'name'和'type',并按'price'升序排列

# 选择数据库/集合(若没有相应的数据库/集合,系统会自动创建)
db = client['pymongo']
col = db['cellphone']

# 向该集合中插入一些文档
col.insert_many([
    {'brand':'apple','name':'iphone12','type':['mini','standard','pro','max'],'price':5299},
    {'brand':'apple','name':'iphone11','type':['standard','pro','max'],'price':4599},
    {'brand':'huawei','name':'mate40','type':['standard','pro','plus'],'price':4999},
    {'brand':'huawei','name':'p40','type':['standard','pro','plus'],'price':3999},
    {'brand':'huawei','name':'mate30','type':['standard','pro'],'price':3899},
    {'brand':'xiaomi','name':'xiaomi11','type':['young','standard','pro'],'price':3699},
    {'brand':'samsung','name':'s20','type':['standard','pro','plus'],'price':4299}
])

# 查询'price'介于4000~5000之间的'name'和'type',并按'price'升序排列
res = col.find({'price':{'$gt':4000,'$lt':5000}},
               {'_id':0 ,'name':1,'price':1}
              ).sort('price')

# 查询结果储存在Cursor中,可以逐条打印来查看
for i in res:
    print(i)

查询结果:

{'name': 's20', 'price': 4299}
{'name': 'iphone11', 'price': 4599}
{'name': 'mate40', 'price': 4999}

5. 聚合查询

目标:按"type"内的数组将数据拆分,查询每个"brand"的平均"price"和数量

# 选择数据库/集合(若没有相应的数据库/集合,系统会自动创建)
db = client['pymongo']
col = db['cellphone']

# 向该集合中插入一些文档
col.insert_many([
    {'brand':'apple','name':'iphone12','type':['mini','standard','pro','max'],'price':5299},
    {'brand':'apple','name':'iphone11','type':['standard','pro','max'],'price':4599},
    {'brand':'huawei','name':'mate40','type':['standard','pro','plus'],'price':4999},
    {'brand':'huawei','name':'p40','type':['standard','pro','plus'],'price':3999},
    {'brand':'huawei','name':'mate30','type':['standard','pro'],'price':3899},
    {'brand':'xiaomi','name':'xiaomi11','type':['young','standard','pro'],'price':3699},
    {'brand':'samsung','name':'s20','type':['standard','pro','plus'],'price':4299}
])

# 按"type"内的数组将数据拆分,查询每个"brand"的平均"price"和数量
res = col.aggregate([
    {'$unwind': '$type'},
    {'$group':{'_id':'$brand',
               '平均价格':{'$avg':'$price'},
               '数量':{'$sum':1}}
     }
])
for i in res:
    print(i)

查询结果:

{'_id': 'huawei', '平均价格': 4349.0, '数量': 8}
{'_id': 'apple', '平均价格': 4999.0, '数量': 7}
{'_id': 'xiaomi', '平均价格': 3699.0, '数量': 3}
{'_id': 'samsung', '平均价格': 4299.0, '数量': 3}