目录
[2.Mongo Shell](#2.Mongo Shell)
[1. Windows11安装MongoDB 7.0.4](#1. Windows11安装MongoDB 7.0.4)
[2.Windows11安装MongoDB Shell 2.1.0](#2.Windows11安装MongoDB Shell 2.1.0)
[3.PyMongo 连接 MongoDB(无密码方式)](#3.PyMongo 连接 MongoDB(无密码方式))
[4.PyMongo 连接 MongoDB(有密码方式)](#4.PyMongo 连接 MongoDB(有密码方式))
[5.PyMongo 操作 MongoDB (数据库管理)](#5.PyMongo 操作 MongoDB (数据库管理))
[6.PyMongo 操作 MongoDB (集合管理)](#6.PyMongo 操作 MongoDB (集合管理))
[7.PyMongo 操作 MongoDB (文档管理)](#7.PyMongo 操作 MongoDB (文档管理))
一、理论
1.PyMongo模块
(1)概念
在python当中,一般常用于开发中操作monoDB的模块有如下三个:
bash
1)pymongo
2)mongoengine
3)moter
它是python中基于pymongo实现的异步操作库,类似于aiomysql,aiomysql也是python基于pymysql实现的异步库。
2.Mongo Shell
(1)概念
MongoShell是一个互动的JavaScript接口的MongoDB,可以使用MongoShell来查询和更新数据以及执行管理操作。
MongoShell是MongoDB发行版的一个组件, 安装并启动MongoDB后,将MongoShell连接到正在运行的MongoDB实例,MongoDB手册中的大多数示例使用 MongoShell,然而,许多驱动程序也提供了与MongoDB类似的接口。
二、实验
1. Windows11安装MongoDB 7.0.4
(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)软件目录

2.Windows11安装MongoDB Shell 2.1.0
(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查看数据

3.PyMongo 连接 MongoDB(无密码方式)
(1)安装PyMongo

(2)数据库连接
bash
# -*- 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集合数据

4.PyMongo 连接 MongoDB(有密码方式)
(1)数据库连接(方式一)
bash
# -*- 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)数据库连接(方式二)
bash
# -*- 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)
① 密码连接

②查询数据

③ 成功

④ 成功

5.PyMongo 操作 MongoDB (数据库管理)
(1)数据库管理
bash
# -*- 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)成功

6.PyMongo 操作 MongoDB (集合管理)
(1)集合管理
bash
# -*- 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表

④ 删除

7.PyMongo 操作 MongoDB (文档管理)
(1)添加文档
bash
# -*- 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)删除文档
bash
# -*- 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()
①查看最后一条数据id,准备删除
② 运行删除代码

③ 已删除

④ mongosh查看

⑤ 插入4个xiaoming

⑥显示已插入

⑦ 删除多个文档

⑧ 查看运行结果,删除了4个

⑨ 已删除

⑩ navicat显示也已删除

(3)更新文档
bash
# -*- 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)查询文档
bash
# -*- 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.pip安装报错
(1)报错

(2)原因分析
网络问题
(3)解决方法
修改下载源
bash
pip install pymongo -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com

2.PyCharm如何添加MongoDB插件
(1)搜索插件

(2)软件左下角进入插件

(3)测试成功
