三个概念
- 数据库:数据库是一个仓库,在仓库中可以存放着集合
- 集合(collection):集合类似于数组,在集合中存放文档
- 文档(document):文档是数据库中最小的单位,我们存储和操作的内容都是文档
如下关系图:
基本指令
show dbs/database
:显示当前的所有数据库use 数据库名
:进入到指定的数据库中db
:显示当前所处的数据库show collections
:显示数据库中所有的集合
数据库的增删改查(CRUD)操作
一、增:db.集合名.insert(doc)
db.集合名.insert(doc)
:向集合中插入一个或多个文档对象(插入一个时传对象,多个时传数组)
当我们向集合中插入文档时,如果没有给文档指定_id
属性(用来作为文档的唯一标识),则数据库会自动为文档添加_id
,我们也可以自己去指定_id
,注意不能相同
db.集合名.insertOne():插入一个文档对象
db.集合名.insertMany():插入多个文档对象
例如:
1
2
3
4
5
6
7
8
//向test数据库中的stus集合中插入一个新的学生对象{name:"Mike",age:18,gender:"male"}
db.stus.insert({name:"Mike",age:18,gender:"male"})
//向test数据库中的stus集合中插入多个新的学生对象
db.stus.insert([
{name:"Mike",age:18,gender:"male"},
{name:"Mike",age:18,gender:"male"},
{name:"Mike",age:18,gender:"male"}
])
二、查:db.集合名.find()
db.集合名.find()
:查询当前集合中符合条件的所有文档(默认情况下按id排序),返回的是一个数组,find({字段:值})可以接受一个对象作为条件参数
例如:
db.stus.find({age:18,gender:"female"})
- db.集合名.findOne():查询集合中符合条件的第一个文档,返回的是一个对象
- db.集合名.find().count():查询所有符合条件的文档的数量,返回数值
- db.集合名.find().limit(显示条数):设置显示数据的上限
例如:
db.numbers.find().limit(10)
//显示前十条文档 - db.集合名.find().skip(跳过条数).limit(显示条数):设置跳过指定条数并显示指定条数
例如:
db.numbers.find().skip(10).limit(10)
//跳过前10条文档,并显示后十条文档
该操作一般用于分页码显示:skip((页码 - 1) * 每页显示条数).limit(每页显示条数)
- db.集合名.find().sort():指定文档的排序规则,sort()需要传递一个对象来指定排序,对象的值为
1
时是升序,-1
时是降序例如:
db.numbers.find().sort({num:1})
//按照num属性进行升序排序
例如:
db.numbers.find().sort({num:1, price:-1})
//先按照num属性进行升序排序,再按照price属性降序排序
查询操作符:
$gt
:查询大于某个值的所有文档
例如:
db.numbers.find({num: {$gt: 500}})
//查询num大于500的文档
$gte
:大于等于
$lt
:小于
$lte
:小于等于
$ne
:不等于
$or
:或;
例如:查询num小于10或大于20的文档:
db.numbers.find({$or: [{num:{$lt:10}}, {num:{$gt:20}}]})
三、改:db.集合名.update(查询条件,新对象)
db.集合名.update(查询条件,新对象)
:修改符合条件的文档对象(默认情况下只改第一个,如果需要修改多个,需要再加上第三个参数{multi: true}),注意update()
默认情况下会使用新对象替换就对象,如果只想修改旧对象指定的属性,而不是替换掉,就需要使用修改操作符来完成修改
- db.集合名.updateOne():修改一个符合条件的文档
- db.集合名.updateMany():修改所有符合条件的文档
- db.集合名.replaceOne():替换一个符合条件的文档
修改操作符:
$set
:可以修改文档中指定的属性
例如:
db.stus.update({name:"Mike"},{$set:{age:38}})
$unset
:可以删除文档中指定的属性
例如:
db.stus.update({name:"Mike"},{$unset:{address:1}})
$push
:用于向数组中添加一个新的元素
$addToSet
:用于向数组中添加一个新的元素,如果数组中已经存在该元素,则不会添加
$inc
:在原来基础上增加
四、删:db.集合名.remove()
db.集合名.remove()
:删除符合条件的所有文档对象(默认情况下删除所有,如果只想删除一个,需要再加上第二个参数true,注意只传递一个空对象{}作为参数,则会删除集合中的所有文档
例如:
删除所有:db.stus.remove({name:"Mike"})
删除一个:db.stus.remove({name:"Mike"}, true)
- db.集合名.deleteOne():删除一个符合条件的文档
- db.集合名.deleteMany():删除所有符合条件的文档
五、删除集合
db.集合名.drop()
:删除集合
六、删除数据库
db.dropDatabase()
:删除数据库
拓展
内嵌文档:Mongodb的文档的属性值也可以是一个文档,当一个文档的属性值是文档时,我们称这个文档叫做 内嵌文档。
例如:
{"cities": ["BJ","SH","GZ"], "movies":["hero","sanguo"]}
MongoDB支持直接通过内嵌文档的属性进行查询,如果要查询内嵌文档时可以通过.
的形式来匹配
注意:如果通过内嵌文档来对文档进行查询,此时属性名必须使用引号
例如:
db.stus.find({"hobby.movies": "hero"})
$push:用于向数组中添加一个新的元素
$addToSet:用于向数组中添加一个新的元素,如果数组中已经存在该元素,则不会添加
投影
投影:在查询时,可以在第二个参数的位置来设置查询结果的投影
例如:
db.stus.find({}, {name:1, _id:0, gender})
//属性值为1时表示显示,_id默认情况下是显示的,如果不想显示_id,就设置为0