本文将介绍MongoDB数据库的增删改查相关操作,具体可参考官方手册:https://docs.mongodb.com/manual/
该页面还提供了MongoDB Web Shell,可以用来在线模拟数据库环境,方便学习。
增
db.collection.insert()
- 向集合中插入一个或多个文档
当我们向集合中插入文档时,如果没有给文档指定 _id 属性,则数据库会自动为文档添加 _id ,该属性用来作为文档的唯一标识。
- 插入一个
db.c1.insert({name:"tom", age:"18", gender:"男"})
- 插入多个
db.c1.insert([
{name:"tom", age:"18", gender:"男"},
{name:"jenney", age:"16", gender:"女"},
{name:"klay", age:"20", gender:"男"}
])
- _id 可以自己指定,数据库就不会自动添加了,自己指定也要确保其唯一性
db.c1.insert({_id:"hello", name:"tom", age:"18", gender:"男"})
- ObjectId() 可用来生成id,由时间戳和机器码生成
ObjectId()
db.collection.insertOne()
- 插入一个文档对象
insertOne()和insertMany()都可以看作insert()的拆分,是3.2版本以后新加入的功能,为了使操作规范化。
db.c1.insertOne({name:"tom", age:"18", gender:"男"})
db.collection.insertMany()
- 插入多个文档对象
db.c1.insertMany([
{name:"tom", age:"18", gender:"男"},
{name:"jenney", age:"16", gender:"女"},
{name:"klay", age:"20", gender:"男"}
])
查
db.collection.find()
- find()用来查询集合中符合条件的所有文档,返回的是一个数组
- 查询集合中所有的文档
db.c1.find()
db.c1.find({})
- find()可以接收一个对象作为条件参数,查询属性是指定值 {字段:值} 的文档
db.c1.find({age:"18"})
- 查询结果且的集合
db.c1.find({_id:"hello", name:"wyc"})
- 查询结果的第1文件
db.c1.find({age:"18"})[1]
- 查询结果的第1个文件的名称
db.c1.find({age:"18"})[1].name
- 所有查询结果的数量
db.collection.find({age:"18"}).count()
db.collection.findOne()
- 用来查询集合中符合条件的第一个文档,返回的是一个文档对象
db.c1.findOne({age:"18"})
改
db.collection.update()
- update(查询条件, 新对象) 会使用新对象来替换旧的对象,默认只会修改一个
db.c1.update({name:"tom"},{age:28})
- 如果需要修改而不是替换指定的属性,需要借助“修改操作符”来完成修改
$set 可以用来修改文档中的指定属性
$unset 可以用来删除文档的指定属性
......
db.c1.update(
{"_id":"123"},
{$set:{
gender:"男"
address:"北京"
}}
)
- update() 默认只会修改一个,要修改多个,再添加一个参数 {multi : true}
db.c1.update(
{"_id":"123"},
{$set:{
gender:"男"
address:"北京"
},
{multi:true}
)
db.collection.updateMany()
- 同时修改多个符合条件的文档
db.collection.updateOne()
- 修改一个符合条件的文档
删
db.collection.remove()
- remove可以根据条件来删除文档,传递条件的方式和find()一样。删除符合条件的所有文档
- 删除指定文档
db.c1.remove({age:28})
- 如果remove()第二个参数传递一个true,则只会删除一个
db.c1.remove({age:28}, true)
- 如果不传参会报错
db.c1.remove()
- 只传递一个空的参数{},相当于清空集合(逐个删除,性能差),删除后show仍存在
db.c1.remove({})
show collections
db.collection.deleteOne()
- 删除一个文档
db.c1.deleteOne({age:28})
db.collection.deleteMany()
- 删除所有文档
db.c1.deleteMany({age:28})
db.collection.drop()
- 删除整个集合,删除后show不存在
db.c1.drop()
show collections
db.dropDatabase()
- 删除整个数据库
use testdb
db.dropDatabase()
isDel字段
- 添加指定字段如isDel,来代表文档是否用到,从而不需要将数据彻底删除,便于维护