基本概念:
文档->行
集合->表
MongoDB在shell中的CURD:
1、创建(insert)
eg:
> post = {"title" : "My blog", "content" : "Here's my blog"}
> db.blog.insert(post)
2、读取(find/findOne)
> db.blog.find()
> db.blog.findOne()
3、更新(update)
update接受(至少)两个参数:第一个是限定条件(用于匹配待更新的文档),第二个是新的文档。
> post.comments = []
> db.blog.update({title : "My blog"}, post)
4、删除(remove)
如果没有使用任何参数,它会将集合内的所有文档全部删除。它可以接受一个作为限定条件的文档作为参数。
> db.blog.remove({title : "My blog"})
数据更新操作符:
1.$inc
用法:{$inc:{field:value}}
作用:对一个数字字段的某个field增加value
示例:将name为chenzhou的学生的age增加5
> db.students.find() { "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "name" : "chenzhou", "age" : 22 } #查询结果显示年龄为22 > db.students.update({name:"chenzhou"},{$inc:{age:5}}) #执行修改,把age增加5 > db.students.find() { "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "name" : "chenzhou", "age" : 27 } > #查询结果显示年龄为27,修改成功
2.$set
用法:{$set:{field:value}}
作用:把文档中某个字段field的值设为value
示例: 把chenzhou的年龄设为23岁
> db.students.find() { "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "name" : "chenzhou", "age" : 27 } > db.students.update({name:"chenzhou"},{$set:{age:23}}) > db.students.find() { "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "name" : "chenzhou", "age" : 23 } >
从结果可以看到,更新后年龄从27变成了23
3.$unset
用法:{$unset:{field:1}}
作用:删除某个字段field
示例: 将chenzhou的年龄字段删除
> db.students.find() { "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "name" : "chenzhou", "age" : 23 } > db.students.update({name:"chenzhou"},{$unset:{age:1}}) > db.students.find() { "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "name" : "chenzhou" } >
4.$push
用法:{$push:{field:value}}
作用:把value追加到field里。注:field只能是数组类型,如果field不存在,会自动插入一个数组类型
示例:给chenzhou添加别名"michael"
> db.students.find() { "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "name" : "chenzhou" } > db.students.update({name:"chenzhou"},{$push:{"ailas":"Michael"}}) > db.students.find() { "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ "Michael" ], "name" : "chenzhou" } >
由结果可以看到,记录中追加了一个数组类型字段alias,且字段有一个为"Michael"的值
5.pushAll
用法:{$pushAll:{field:value_array}}
作用:用法同$push一样,只是$pushAll可以一次追加多个值到一个数组字段内。
示例:给chenzhou追加别名A1,A2
> db.students.find() { "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ "Michael" ], "name" : "chenzhou" } > db.students.update({name:"chenzhou"},{$pushAll:{"ailas":["A1","A2"]}}) > db.students.find() { "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ "Michael", "A1", "A2" ], "name" : "chenzhou" } >
6.$addToSet
用法:{$addToSet:{field:value}}
作用:加一个值到数组内,而且只有当这个值在数组中不存在时才增加。
示例:往chenzhou的别名字段里添加两个别名A3、A4
> db.students.find() { "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ "Michael", "A1", "A2" ], "name" : "chenzhou" } > db.students.update({name:"chenzhou"},{$addToSet:{"ailas":["A3","A4"]}}) > db.students.find() { "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ "Michael", "A1", "A2", [ "A3", "A4" ] ], "name" : "chenzhou" } >
由结果可以看出,更新后ailas字段里多了一个对象,这个对象里包含2个数据,分别是A3、A4
7.$pop
用法:删除数组内第一个值:{$pop:{field:-1}}、删除数组内最后一个值:{$pop:{field:1}}
作用:用于删除数组内的一个值
示例: 删除chenzhou记录中alias字段中第一个别名
> db.students.find() { "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ "Michael", "A1", "A2", [ "A3", "A4" ] ], "name" : "chenzhou" } > db.students.update({name:"chenzhou"},{$pop:{"ailas":-1}}) > db.students.find() { "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ "A1", "A2", [ "A3", "A4" ] ], "name" : "chenzhou" } >
由结果可以看书,第一个别名Michael已经被删除了。
我们再使用命令删除最后一个别名:
> db.students.find() { "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ "A1", "A2", [ "A3", "A4" ] ], "name" : "chenzhou" } > db.students.update({name:"chenzhou"},{$pop:{"ailas":1}}) > db.students.find() { "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ "A1", "A2" ], "name" : "chenzhou" } >
由结果可以看出,alias字段中最后一个别名["A3","A4"]被删除了。
8.$pull
用法:{$pull:{field:_value}}
作用:从数组field内删除一个等于_value的值
示例:删除chenzhou记录中的别名A1
> db.students.find() { "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ "A1", "A2" ], "name" : "chenzhou" } > db.students.update({name:"chenzhou"},{$pull:{"ailas":"A1"}}) > db.students.find() { "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ "A2" ], "name" : "chenzhou" } >
9.$pullAll
用法:{$pullAll:value_array}
作用:用法同$pull一样,可以一次性删除数组内的多个值。
示例: 删除chenzhou记录内的所有别名
> db.students.find() { "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ "A1", "A2" ], "name" : "chenzhou" } > db.students.update({name:"chenzhou"},{$pullAll:{"ailas":["A1","A2"]}}) > db.students.find() { "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ ], "name" : "chenzhou" } >
可以看到A1和A2已经全部被删除了
10.$rename
用法:{$rename:{old_field_name:new_field_name}}
作用:对字段进行重命名
示例:把chenzhou记录的name字段重命名为sname
> db.students.find() { "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ ], "name" : "chenzhou" } > db.students.update({name:"chenzhou"},{$rename:{"name":"sname"}}) > db.students.find() { "_id" : ObjectId("5030f7ac721e16c4ab180cdb"), "ailas" : [ ], "sname" : "chenzhou" } >
由结果可以看出name字段已经被更新为sname了。
_id和ObjectId
MongoDB中存储的文档必须有一个“_id”键。这个键的值可以是任何类型的。默认是个Objectid对象。在一个集合里面,每个文档都有唯一的“_id”,确保集合里面每个文档都能被唯一标识。如果有两个集合的话,两个集合都可以有一个"_id"的值为123,但是每个集合里面只能有一个文档的"_id"值为123.
1、ObjectId
ObjectId是"_id"的默认类型。它设计成清凉型的,不同的及其都能用全剧唯一的同种方法方便地生成它。这个mongoDB采用ObjectId,而不是其他比较常见的做法(比如自动增加的主键)的主要原因,因为在多个服务器上同步自动增加主键值既费力又费时。
ObjectId使用12字节的存储空间,是一个由24个十六进制数字组成的字符串(每个字节可以存储两个十六进制数字)。
生成方式: 时间戳(4)|机器(3)|PID(2)|计数器(3)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现