mongodb
NoSQL - MongoDB文件型数据库
文件型 - MongoDB
User: [ {id:1,name:"蔡文姬",age:16,gender:"女"}, {id:2,name:"嫦娥",age:16,gender:"女"}, { id:3,name:"孙悟空",age:16,gender:"女"}, {id:"四",name:123,age:"十六",gender:1,hobby:["篮球","于谦","羽毛球","双色球”]} ] 4 "四" 操作简单方便易懂 更加接近程序员操作 原生语法ORM 因为是非关系型数据库,没有结构限制,扩展性很强
关系型(拉里埃里森) - MySQL MSSQL(SQLServer微软,Windows) Sybase ORCAL(MySQL) DB2+AUX(IBM)
MySQL MS - MySQL Ux
User:
ID name age gender hobby
1 蔡文姬 16 女 null
2 嫦娥 9999 女 null
3 孙悟空 8888 男 null
四 (不行)
端口号
Redis 6379
MYSQL 3306
MongoDB 27017
1.安装 MongoDB
配置环境变量 - Path :MongoDB/bin/mongod.exe
CMD -
mongod 启动命令
Mongod --dbpath 数据库存放路径(数据库存放路径必须存在)
27017 MongoDB的默认端口
mongo 开启客户端 默认连接地址是本机
2.基本操作命令
db -- 当前使用的数据库 查看名称,代指当前使用的数据库
show databases -- 查看当前服务器磁盘上的所有数据库
use dbname -- 切换当前使用的数据库 或者在内存中创建一个新的数据库 赋值给 db
show tables -- 查看当前数据库中所有磁盘中的表
db.tablename -- 使用当前数据库中的tablename表 在内存中创建表
使用不存在的对象即创建该对象
3.增删改查
增
db.tablename.insert({name:"123"}) #在磁盘中写入数据{name:"123"}
db.tablename.insert([{name:"123"},{name:"123"}]) #在磁盘中写入多条数据
查
db.tablename.find({查询条件}) # 查询所有符合条件的数据
db.tablename.find({name:"345"}) # 查询符合{name:"345"}的所有数据
改
db.tablename.update({查询条件},{$修改器:{修改属性}})
# 根据查询条件,修改符合条件的第一条数据
修改器:认定当前修改的类型 $set设置类型修改器 强制修改某字段的值
db.tablename.update({name:"345"},{$set:{name:789}})
db.tablename.update({name:"123"},{$set:{gender:1}}) 符合不存在即创建的原则
删
db.tablename.remove({查询条件}) # 删除所有符合条件的数据
删除表格 - db.tablename.drop()
删除库 - db.dropDatabase()
4.MongoDB 数据类型
MYSQL MongoDB 口语
database database 数据库
tables Collections 表儿
column Field 列
row Document 数据 一条数据
ObjectID :Documents 自生成的 _id
String: 字符串,必须是utf-8
Boolean:布尔值,true 或者false (这里有坑哦~在我们大Python中 True False 首字母大写)
Integer:整数 (Int32 Int64 你们就知道有个Int就行了,一般我们用Int32)
Double:浮点数 (没有float类型,所有小数都是Double)
Arrays:数组或者列表,多个值存储到一个键 (list哦,大Python中的List哦)
Object:如果你学过Python的话,那么这个概念特别好理解,就是Python中的字典,这个数据类型就是字典
Null:空数据类型 , 一个特殊的概念,None Null
Timestamp:时间戳
Date:存储当前日期或时间unix时间格式 (我们一般不用这个Date类型,时间戳可以秒杀一切时间类型)
5.$数学比较符
$lt 小于
$lte 小于等于
$gt 大于
$gte 大于等于
$eq : 等于
$ne 不等于
6.$修改器 + $ 字符特殊用法 ($)
针对单个字段的操作:
$set 修改某个字段的值 db.stu.update({age:20},{$set:{name:"绿绿",gender:1}})
$unset 删除字段 db.stu.update({name:"小黑"},{ $unset: { newField:1 } })
$inc 引用增加 先引用 后增加 db.stu.update({},{$inc:{age:-1}})
针对 Array == list 操作
$push == append()
在Array的最后一个位置中增加数据
db.stu.update({name:"小黑"},{ $push: { hoobys:"渣男" } })
$pushAll == extend()
db.stu.update({name:"小黑"},
{$pushAll: {"hoobys":[1,2,3,5]}},
)
$pullAll
db.stu.update({name:"小黑"},
{$pullAll: {"hoobys":[1,2,3,5]}},
)
$pull == remove()
删除Array中的指定元素
db.stu.update({name:"小黑"},{ $pull: { hoobys:"渣男" } })
$pop (=) pop()
删除Array中的第一个或者最后一个元素 正数是倒序删除 负数是正序删除
db.stu.update({name:"小黑"},{ $pop: { hoobys:1 } })
$ 字符特殊用法
存储当前(Array)符合条件的元素下标索引 ,只能存储最外层的 索引位置
例子:hobbys中等于5的元素改为 "五"
先查询到hobbys中5的 位置(2) ,将位置存储在 $==(2) 字符中 然后根据$字符的位置(2)更改数据
db.stu.update({"hoobys":5},{ $set: {"hoobys.$":"五"} })
Object操作:
db.stu.update({name:"小黑"},{ $set: { "hobby.烫头":"锡纸" } })
Array + Object
7.sort skip limit
pycharm 操作
import json from bson import ObjectId from pymongo import MongoClient # from pymongo.cursor import Cursor m_client = MongoClient("127.0.0.1",27017) mdb = m_client["S20"] # 增 # 增加数据时 res.inserted_id or inserted_ids # 都是 ObjectId不是字符串 # res = mdb.user.insert_one({) # print(res.inserted_id) # 5d2ed8f865d6b8f1c494ff78 # res = mdb.user.insert_many([{"name":"小黑"},{"name":"小二B"}]) # print(res.inserted_ids) # 查: # res = list(mdb.user.find({})) # print(res) # res_list = [] # # for user in res: # user["_id"] = str(user.get("_id")) # res_list.append(user) # # res_json = json.dumps(res_list) # print(res_json) # res = list(mdb.user.find({})) # print(res) # # for index,user in enumerate(res): # res[index]["_id"] = str(user.get("_id")) # # res_json = json.dumps(res) # print(res_json) # res = mdb.user.find_one({"name":"小黑"}) # res = mdb.user.find_one({"_id":ObjectId("5d2ed96e38887b85450ed6d8")}) # res["_id"] = str(res.get("_id")) # print(res,str(res.get("_id"))) # res_json = json.dumps(res) # print(res_json) # 修改数据 # res = mdb.user.update_one({"name":"小二B"},{"$set":{"name":"A_C"}}) # print(res.modified_count) # # user = mdb.user.find_one({"name":"A_C"}) # user["gender"] = 1 # user["age"] = 99 # user["name"] = "小二A_C" # user["hobby"] = ["choyan","hj","xzt"] # # res = mdb.user.update_one({"name":"A_C"},{"$set":user}) # user = mdb.user.find_one({"name":"小二A_C"}) # user["hobby"].append("洗头") # user["hobby"].remove("hj") # # mdb.user.update_one({"name":"小二A_C"},{"$set":{"hobby":user.get("hobby")}}) # 删除 # res = mdb.user.delete_one({}) # print(res.deleted_count) import pymongo # 排序 + skip + limit # res = list(mdb.stu.find().sort("age",pymongo.DESCENDING)) # res = list(mdb.stu.find().skip(2)) # res = list(mdb.stu.find().limit(2)) # for s in res: # print(s) # 分页 # res = list(mdb.stu.find().sort("age",pymongo.ASCENDING).limit(2).skip(4)) # print(res)
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
· 现代计算机视觉入门之:什么是图片特征编码
· .NET 9 new features-C#13新的锁类型和语义
· Spring AI + Ollama 实现 deepseek-r1 的API服务和调用
· 《HelloGitHub》第 106 期
· 数据库服务器 SQL Server 版本升级公告
· 深入理解Mybatis分库分表执行原理
· 使用 Dify + LLM 构建精确任务处理应用