本文章在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'}

以下是一些常用的修饰符条件

  1. $gt(大于):用于匹配字段值大于指定值的文档。

    collection.find({"field_name": {"$gt": value}})
    
  2. $lt(小于):用于匹配字段值小于指定值的文档。

    collection.find({"field_name": {"$lt": value}})
    
  3. $gte(大于等于):用于匹配字段值大于等于指定值的文档。

    collection.find({"field_name": {"$gte": value}})
    
  4. $lte(小于等于):用于匹配字段值小于等于指定值的文档。

    collection.find({"field_name": {"$lte": value}})
    
  5. $ne(不等于):用于匹配字段值不等于指定值的文档。

    collection.find({"field_name": {"$ne": value}})
    
  6. $in(包含于):用于匹配字段值在指定列表中的文档。

    collection.find({"field_name": {"$in": [value1, value2, value3]}})
    
  7. $nin(不包含于):用于匹配字段值不在指定列表中的文档。

    collection.find({"field_name": {"$nin": [value1, value2, value3]}})
    
  8. $exists(存在):用于匹配具有指定字段的文档。

    collection.find({"field_name": {"$exists": True}})
    
  9. $type(类型):用于匹配字段的数据类型。

    collection.find({"field_name": {"$type": data_type}})
    
  10. $regex(正则表达式):用于执行正则表达式匹配。

    collection.find({"field_name": {"$regex": "pattern"}})
    

这些修饰符条件可用于创建各种查询,以满足你的数据筛选需求。你可以根据文档字段的值和数据类型来选择适当的修饰符条件。