目录
一、理论
1.PyMongo模块
2.Mongo Shell
二、实验
1. Windows11安装MongoDB 7.0.4
2.Windows11安装MongoDB Shell 2.1.0
3.PyMongo 连接 MongoDB(无密码方式)
4.PyMongo 连接 MongoDB(有密码方式)
5.PyMongo 操作 MongoDB (数据库管理)
6.PyMongo 操作 MongoDB (集合管理)
7.PyMongo 操作 MongoDB (文档管理)
三、问题
1.pip安装报错
2.PyCharm如何添加MongoDB插件
(1)概念
在python当中,一般常用于开发中操作monoDB的模块有如下三个:
1)pymongo
2)mongoengine
3)moter
它是python中基于pymongo实现的异步操作库,类似于aiomysql,aiomysql也是python基于pymysql实现的异步库。
(1)概念
MongoShell是一个互动的JavaScript接口的MongoDB,可以使用MongoShell来查询和更新数据以及执行管理操作。
MongoShell是MongoDB发行版的一个组件, 安装并启动MongoDB后,将MongoShell连接到正在运行的MongoDB实例,MongoDB手册中的大多数示例使用 MongoShell,然而,许多驱动程序也提供了与MongoDB类似的接口。
(1)下载
Download MongoDB Community Server | MongoDB
(2)选择版本
(3)next下一步
(4)next下一步
(5)这一步选择Custom
(6)OK
(7)next下一步
(8)next下一步
(9)这里取消Install MongoDB compass,next下一步
(10)Install安装
(11)Finish完成
(12) 服务已自启动
(13)查看默认配置文件
(14)软件目录
(1)下载
Try MongoDB Tools - Download Free Here | MongoDB
(2)选择版本
(3)软件目录
(4)进入bin目录
(5)双击mongosh.exe进入命令行界面
(4)创建数据库
(5)批量插入数据
(6)完成数据导入
(7)navicat查看数据
(8)给Admin数据库创建账户管理员
(9)创建用户自己的数据库的角色
(10)navicat查看数据
(1)安装PyMongo
(2)数据库连接
# -*- coding: utf-8 -*-
import pymongo
if __name__ == '__main__':
# 无密码连接mongoDB
mongo = pymongo.MongoClient('localhost',27017)
print(mongo)
#切换数据库
db = orders = mongo["demo"]
#切换数据集
orders = db["orders"]
#print(orders.find())
#查询100条数据
for document in orders.find().limit(100):
print(document)
① 运行
② 输出字典结构.
③运行
④拿到游标
⑤ 运行
⑥输出100条数据
⑦ navicat查看mongodb集合数据
(1)数据库连接(方式一)
# -*- coding: utf-8 -*-
import pymongo
from urllib.parse import quote_plus
if __name__ == '__main__':
# 有密码连接mongoDB
username = quote_plus("david")
password = quote_plus("123456")
# 获取数据库连接对象
mongo = pymongo.MongoClient(f"mongodb://{username}:{password}@127.0.0.1:27017/david")
print(mongo)
# 获取数据库操作对象
db = mongo["david"]
print(db)
#获取集合操作对象
user_list = db["user_list"]
# 获取数据
for document in user_list.find():
print(document)
① 密码连接成功
(2)数据库连接(方式二)
# -*- coding: utf-8 -*-
import pymongo
from urllib.parse import quote_plus
if __name__ == '__main__':
#有密码连接mongoDB
mongo = pymongo.MongoClient('mongodb://127.0.0.1:27017')
db = mongo["david"]
username = "david"
password = "123456"
db.authenticate(username, password)
print(db)
collection = db["user_list"]
print(collection)
for document in collection.find():
print(document)
① 密码连接
②查询数据
③ 成功
④ 成功
(1)数据库管理
# -*- coding: utf-8 -*-
import pymongo
# from bson import ObjectId
if __name__ == '__main__':
#有密码连接mongoDB
mongo = pymongo.MongoClient('mongodb://127.0.0.1:27017')
db = mongo["david"]
username = "david"
password = "123456"
db.authenticate(username, password)
# 新建一个数据库
orders = db["david"]["orders"]
# document = {
# # "_id": ObjectId(),
# # "_id": 1,
# "name": "xiaozhao",
# "number": "00000001",
# }
# ret = orders.insert_one(document)
# 查看数据库列表[只会列出有文档数据的数据库]
print(mongo.list_database_names())
# print(db["david"].list_indexes()) # 查看集合的索引
# print(db.list_collection_names()) # 查看所有库下的所有集合
# print(mongo["david"])
(2)新建数据库
(3)成功
(4)查看数据库列表(只会列出有文档数据的数据库)
(5)shop因为没有内容,所以没有被创建的
(6)查看所有库下的所有集合
(7)成功
(1)集合管理
# -*- coding: utf-8 -*-
import pymongo
# from bson import ObjectId
if __name__ == '__main__':
#有密码连接mongoDB
mongo = pymongo.MongoClient('mongodb://127.0.0.1:27017')
db = mongo["david"]
username = "david"
password = "123456"
db.authenticate(username, password)
# 查看数据库列表[只会列出有文档数据的数据库]
print(mongo.list_database_names())
# 查看指定数据的集合列表[只会列出有文档数据的集合]
print( db.list_collection_names() )
# 获取指定名称对应的集合操作对象
user_list = db["orders"]
#给集合添加数据
document = {
"name": "xiaoli",
"password": "123456"
}
user_list.insert_one(document)
# 删除集合
db["david.orders"].drop()
# 查看指定数据的集合列表[只会列出有文档数据的集合]
print( db.list_collection_names() )
① 查看指定数据的集合列表(只会列出有文档数据的集合)
② 成功
③ david库下新建orders表
④ 删除
(1)添加文档
# -*- coding: utf-8 -*-
import pymongo
# from bson import ObjectId
if __name__ == '__main__':
#有密码连接mongoDB
mongo = pymongo.MongoClient('mongodb://127.0.0.1:27017')
db = mongo["david"]
username = "david"
password = "123456"
db.authenticate(username, password)
#切换数据集
user_list = db["user_list"]
# # 添加一个文档
# document = {"name": "xiaoming", "mobile": "130XXXXXXXX", "age": 16}
# ret = user_list.insert_one(document)
# print(ret.inserted_id) # 返回InsertOneResult对象
# 插入文档时,如果没有指定_id,将自动分配一个唯一的id。
# 添加多个文档
document_list = [
{"name": "xiaoqian", "mobile": "136XXXXXXXX", "age": 17},
{"name": "xiaosun", "mobile": "135XXXXXXXX", "age": 18},
{"name": "xiaowei", "mobile": "139XXXXXXXX", "age": 18},
]
ret = user_list.insert_many(document_list)
# 打印文档_id值列表:
print(ret.inserted_ids)
① 添加一个文档
②成功
③ mongosh查看已插入.
④ 添加多个文档
⑤ 最后3个显示已插入
(2)删除文档
# -*- coding: utf-8 -*-
import pymongo
from bson import ObjectId
if __name__ == '__main__':
#有密码连接mongoDB
mongo = pymongo.MongoClient('mongodb://127.0.0.1:27017')
db = mongo["david"]
username = "david"
password = "123456"
db.authenticate(username, password)
#切换数据集
user_list = db["user_list"]
# 删除一个文档
# query1 = {"_id": ObjectId("656803f10a84aec77e378334")}
# ret1 = user_list.delete_one(query1)
# print(ret1)
# print(ret1.deleted_count)
#
# query2 = {"name": "xiaoming"}
# ret2 = user_list.delete_one(query2)
# print(ret2)
# print(ret2.deleted_count)
# 删除多个文档
query = {"name": "xiaoming"}
ret = user_list.delete_many(query)
print(ret)
print(ret.deleted_count) # 删除总数
# 可以通过删除集合的方式,达到删除所有文档的效果
# user_list.drop()
② 运行删除代码
③ 已删除
④ mongosh查看
⑤ 插入4个xiaoming
⑥显示已插入
⑦ 删除多个文档
⑧ 查看运行结果,删除了4个
⑨ 已删除
⑩ navicat显示也已删除
(3)更新文档
# -*- coding: utf-8 -*-
import pymongo
from bson import ObjectId
if __name__ == '__main__':
#有密码连接mongoDB
mongo = pymongo.MongoClient('mongodb://127.0.0.1:27017')
db = mongo["david"]
username = "david"
password = "123456"
#db.authenticate(username, password)
#切换数据集
user_list = db["user_list"]
# #更新一条数据
# query = {"name": "xiaobai"}
# data = {"$set": {"age": 22}}
# ret = user_list.update_one(query, data)
# print(ret.modified_count) #修改数量
#更新所有文档
query = {"mobile": {"$regex": "^13"}}
data = {"$inc": {"age": 2}}
ret = user_list.update_many(query, data)
print(ret)
print(ret.modified_count)
①查看当前xiaobai年龄为16岁
②修改数据
③运行成功
④查看数据
⑤ xiaobai年龄为22岁
⑥有2人有手机号
⑦ 13开头手机号年龄自增2
⑧ 运行成功
(4)查询文档
# -*- coding: utf-8 -*-
import pymongo
from bson import ObjectId
if __name__ == '__main__':
#有密码连接mongoDB
mongo = pymongo.MongoClient('mongodb://127.0.0.1:27017')
db = mongo["david"]
username = "david"
password = "123456"
# db.authenticate(username, password)
#切换数据集
user_list = db["user_list"]
# 查看一个文档,返回结果就是一个字典
# ret = user_list.find_one()
# print(ret["name"])
# print(ret["child"])
# print(ret["child"]["age"])
# 统计文档数量,返回结果就是整数
# ret = user_list.count()
# print(ret)
# # 查看所有文档
# for document in user_list.find():
# print(document)
# # 投影查询,去掉id
# for document in user_list.find({},{"_id":0}):
# print(document)
# # 查看文档部分字段,find和find_one的第二个参数表示控制字段的显示隐藏,1为显示,0为隐藏
# for document in user_list.find({}, {"_id": 0, "name": 1, "mobile": 1}):
# print(document)
# # 条件查询
# query = {"age": 20}
# document_list = user_list.find(query)
# for document in document_list:
# print(document)
# # 比较运算符
# query = {"age": {"$gt": 17}}
# document_list = user_list.find(query)
# for document in document_list:
# print(document)
# query = {"age": {"$eq": 20}}
# document_list = user_list.find(query)
# for document in document_list:
# print(document)
# # 多个字段排序:
# # sort([("键1",1),("键2",-1)])
# document_list = user_list.find().sort("age")
# for document in document_list:
# print(document)
#
# # 限制查询结果数量
# document_list = user_list.find().limit(3)
# for document in document_list:
# print(document)
# # 偏移、跳过
# # skip(int)
# document_list = user_list.find().limit(3).skip(3) # 从第3篇文档开始获取3篇文档
# for document in document_list:
# print(document)
# # 自定义条件函数
# document_list = user_list.find({"$where": "this.age==20"})
# for document in document_list:
# print(document)
document_list = user_list.find({"$where": "this.age>=18"}).sort("age",-1)
for document in document_list:
print(document)
①查看一个文档
②返回结果就是一个字典
③修改
④运行结果
⑤修改
⑥ child
⑦ 修改
⑧child的age
⑨修改
⑩查看所有文档
⑪投影查询
⑫已去掉id
⑬查看文档部分字段
⑭条件查询
⑮条件查询2
⑯比较运算符
⑰多个字段排序
⑱限制查询结果数量
⑲偏移、跳过
⑳偏移、跳过2
㉑定义条件函数,倒叙排序
(1)报错
(2)原因分析
网络问题
(3)解决方法
修改下载源
pip install pymongo -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
(1)搜索插件
(2)软件左下角进入插件
(3)测试成功