目录
2.Windows11安装MongoDB Shell 2.1.0
(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()
①查看最后一条数据id,准备删除
② 运行删除代码

③ 已删除

④ 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)测试成功
