MongoDB 与 Python Mongodb
本文章在windows环境,不探讨MongoDB Shell命令
1. 安装MongoDB
这个官方DOC https://www.mongodb.com/docs/manual/introduction/
下载地址 https://www.mongodb.com/try/download/community
选择msi后缀的版本下载
直接无脑安装
2. 安装Mongosh
MongoDB Shell(mongosh)未与MongoDB服务器一同安装。你需要按照mongosh的安装说明单独下载和安装mongosh(点击查看)。
下载完成后解压放入一个目录,例如C盘下,添加环境变量,记得加上\bin
例如 C:\mongosh-2.0.1-win32-x64\bin
在终端输入 mongosh
测试是否成功进入shell
在Navicat可视化查看:
直接添加连接,选择MongoDB,信息默认就行(如果没改)
3. Python中的使用
3.1. 安装包
pip install pymongo
3.2. 连接数据库的2方法
from pymongo.mongo_client import MongoClient
# 使用默认本地主机和端口(27017)创建连接
client = MongoClient('localhost', 27017)
# 或者,使用连接字符串连接到 MongoDB
s = "mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+2.0.1"
client = MongoClient(s)
s 这字符串在哪获得?终端中进入mongosh时会显示,在
Connecting to:
后面
3.3. 创建数据库和集合
集合相当于表
# 创建数据库
mydb = client["my1stdb"]
# 创建表
mytable = mydb["class"]
此时数据库和集合还没真正创建,因为数据库和表是空的
3.4. 显示数据库、集合和数据
显示数据库、集合
print(
client.list_database_names(), # 显示数据库列表
mydb.list_collection_names() # 显示集合列表
)
显示集合内容
records = mytable.find()
for record in records:
print(record)
# 不能直接打印 records
此时看不到,完成 3.5 才能看到
3.5. 添加数据
添加单个记录
mytable.insert_one(
# 输入是一个字典
{"name": "xiaohei", "age": "18"}
)
添加多个记录
mytable.insert_many(
# 输入时一个字典列表
[{"name": "xiaohong", "age": "18"},
{"name": "xiaolan", "age": "18"}]
)
3.6. 删除集合和数据和数据库
删除一个(符合条件的第一个)
mytable.delete_one(
{"name": "xiaohong"}
)
删除全部
mytable.delete_many({})
删除多个(所有符合条件的)
mytable.delete_many(
{"name": "xiaohong", "age": "18"}
)
# 传入的是一个字典,不是列表
# 可以使用正则表达式
mytable.delete_many(
{"name": {"$regex": "^xiao"}}
# 删除所有xiao开头的数据
)
删除集合
mydb = client["my1stdb"]
mytable = mydb["class1"]
# 第一种
mydb.drop_collection("class1")
# 第二种
mytable.drop()
删除数据库
# 第一种
client.drop_database("xxx")
# 第二种
mytable.drop()
3.6. 修改数据
如下面格式
# mytable.update_one(
# {"查找"},
# {"$set": "改成什么"}
# )
mytable.update_one(
{"name": "xiaolan"},
{"$set": {"name": "xiaobai"}}
)
mytable.update_many(
{"name": "xiaohong"},
{"$set": {"name": "xiaolan"}}
)
3.7. 查询数据
查找一个
x = mytable.find_one(
{"age": "14"}
)
# {'_id': ObjectId('65297cce8b9a13e50784fe86'), 'name': 'xiaolu', 'age': '14'}
查找多个
x = mytable.find(
{"age": "14"}
)
# {'_id': ObjectId('65297d04b06c5d3a99ddc75b'), 'name': 'xiaolu', 'age': '14'}
# {'_id': ObjectId('65297d04b06c5d3a99ddc75d'), 'name': 'xiaolan', 'age': '14'}
自定义查找返回的结果
0
为隐藏
,1
为显示
,_id
默认为 1
x = mytable.find(
{},
{"_id": 0, "name":1,"age": 1}
)
# {'name': 'xiaohong', 'age': '18'}
# {'name': 'xiaobai', 'age': '20'}
# ...
高级查找
查找年龄大于14的学生
x = mytable.find(
{"age": {"$gt": "14"}},
{"_id": 0, "name": 1}
)
# {'name': 'xiaohong'}
# {'name': 'xiaobai'}
# {'name': 'xiaohei'}
# {'name': 'xiaozi'}
使用
.limit()
来显示返回的答案的数量x = mytable.find( {"age": {"$gt": "14"}}, {"_id": 0, "name": 1} ).limit(2) # {'name': 'xiaohong'} # {'name': 'xiaobai'}
以下是一些常用的修饰符条件:
-
$gt
(大于):用于匹配字段值大于指定值的文档。collection.find({"field_name": {"$gt": value}})
-
$lt
(小于):用于匹配字段值小于指定值的文档。collection.find({"field_name": {"$lt": value}})
-
$gte
(大于等于):用于匹配字段值大于等于指定值的文档。collection.find({"field_name": {"$gte": value}})
-
$lte
(小于等于):用于匹配字段值小于等于指定值的文档。collection.find({"field_name": {"$lte": value}})
-
$ne
(不等于):用于匹配字段值不等于指定值的文档。collection.find({"field_name": {"$ne": value}})
-
$in
(包含于):用于匹配字段值在指定列表中的文档。collection.find({"field_name": {"$in": [value1, value2, value3]}})
-
$nin
(不包含于):用于匹配字段值不在指定列表中的文档。collection.find({"field_name": {"$nin": [value1, value2, value3]}})
-
$exists
(存在):用于匹配具有指定字段的文档。collection.find({"field_name": {"$exists": True}})
-
$type
(类型):用于匹配字段的数据类型。collection.find({"field_name": {"$type": data_type}})
-
$regex
(正则表达式):用于执行正则表达式匹配。collection.find({"field_name": {"$regex": "pattern"}})
这些修饰符条件可用于创建各种查询,以满足你的数据筛选需求。你可以根据文档字段的值和数据类型来选择适当的修饰符条件。