MongoDB数据库的基本操作梳理

807 阅读4分钟

此篇文章开始之前已经默认你电脑上装了MongoDB数据库,所以不再赘述安装。

基本的 Shell 命令

显示已经存在的数据库

>show dbs

进入数据库

>use test(数据库名字)

显示数据库中的集合

>show collections

显示当前位置

>db     (常用)

数据的基本操作

建立数据库

>use test(数据库名字)  //若没有test数据库,使用此命令会自动创建数据库,
数据库默认为空

新建数据集合并插入数据

>db.users.insert() //users为集合名,当无此集合时,使用此命令可创建次集合,
并 加入数据。
//例如:
>db.users.insert({'name':'钢铁侠'})

>db.users.insertMany([      //插入多个文档
{'name':'钢铁侠'},
{'name':'钢铁侠'},
{'name':'钢铁侠'}
])

>db.users.insertOne( { item: "card", qty: 15 } ); //插入一个文档

查询所有数据

find()返回的是一个数组
>db.users.find() //使用此语句可以查看users集合下的所有数据

>db.users.find({name:'ljy'});//查找name为ljy的数据

查询集合的第一条数据

findOne()返回的是一个对象
>db.users.findOne() //使用此语句可以查询users集合下的第一条数据

修改集合中的数据

>db.users.update({查询条件},{修改数据})//第一个参数是要查询的条件,
第二个参数是要修改成的值,
注意:在这里可以多加数据项
//例如:
>db.users.update({'name':'钢铁侠'},{'age':21,'sex':1})

删除集合中的数据

>db.users.remove({删除条件})
//例如:
>db.users.remove({'name':'钢铁侠'})//会删除符合条件的所有数据
//remove()第二个参数传递一个true,会只删除一个数据
>db.users.remove({'name':'钢铁侠'},true)

>db.users.remove({})//这样的话,会删除集合中的所有文档

删除数据集合

>db.users.dorp() //删除整个集合,使用时一定要注意慎重

删除数据库

>db.dropDatabase() //删除整个数据库,在删除时一定先要进入该数据库

update 修改器

$set 修改器

用于修改一个指定的数据项

>db.users.update({'name':'钢铁侠'},{$set:{'age':23}})//修改ok

还可以用于修改嵌套内容

>db.users.update({'name':'钢铁侠'},{$set:{'school.name':'大学'})

unset 修改器

用于将数据项删除

>db.users.update({'name':'钢铁侠'},{$unset:{'age':''}})//修改ok

$inc 修改器

用于对value值是数字的数据修改,修改的一定是数字,对字符串不起作用

>db.users.update({'name':'js'},{$inc:{'age':-2}})

multi 选项

multi是update的参数,可选,默认是fasle,只更新找到的第一条数据,如果这个参数为true,就把按条件查出来的多条记录全部跟新

>db.users.updateMany({},{$set:{'like':[]}})//修改多个数据

>db.users.update({},{$set:{'like':[]}},{multi:true})
//首先匹配所有,然后给集合中的每个数据添加like数据项

upsert 选项

upsert是update的参数,可选,默认是fasle,upsert是在找不到值的情况下,直接插入这条数据,true代表没有就添加,fasle代表没有不添加。

>db.users.update({name:'js'},{$set:{age:20}},{upsert:true})
//如果找到age为20岁,就不添加,否者添加age:20

update 数组修改器

$push 修改器

$push的作用是追加数组中的值

>db.users.update({'name':'js'},{$push:{like:'画画'}})

$push也可以给内嵌文档添加值

>db.users.update({'name':'js'},{$push:{'school.name':'小学'}})

$ne 修改器

$ne修改器的作用是,检查一个值是否存在,如果不存在就执行相关操作,如果存在就不会执行相关操作

>db.users.update({'name':'js',age:{$ne:21}},{$set:{age:21}}})

总结:没有就执行,有就不执行

$addToSet 修改器

$addToSet是 $ne的升级版,作用是,查找是否存在,不存在就push上

>db.users.update({name:'js'},{$addToSet:{like:'上网'}})

$each 修改器

$each可以传入一个数组,一次增加多个值进去,相当于批量增加,性能比循环操作好的多

>var newLikes = ['滑雪','打篮球']

>db.users.update({name:'js'},{$addToSet:{like:{$each:newLikes}}})

$pop 修改器

$pop删除数组值,只删除一次,并不是删除数组中的所有值,它有两个选项1和-1

1:从数组末尾进行删除

-1:从数组前面进行删除

>db.users.update({name:'js'},{$pop:{like:1}})
>>db.users.update({name:'js'},{$pop:{like:-1}})

数组定位修改

>db.users.update({name:'js'},{$set:{like.2:'踢足球'}})

条件操作符

筛选字段

有时我们只想看到某一些字段,我们可以这样操作:

>db.users.find({name:'js'},{name:true,age:true})

这样我们就只能看到name和age字段,true和false,可以用1和0表示

小于($lt)

小于等于($lte)

大于($gt)

大于等于($gte)

不等于($ne)

>db.users.find({age:{$lt:20,$gt:18}})

find 多条件查询

$in 修饰符

可以解决查询多值的情况

>db.users.find({age:{$in:[21,23]})//查找年龄是21和23的数据

$or 修饰符

用来查询多个键值的情况,或者的意思

>db.users.find({$or:[{age:{$gte:23}},{like:'画画'}]})
//查找年龄大于等于23或者喜欢画画的数据

$and 修饰符

就是与的意思

>db.users.find({$and:[{age:{$gte:23}},{like:'画画'}]})
//查找年龄大于等于23和喜欢画画的

find 的数组查询

基本操作

>db.users.find({like:['画画','写字']})//查找喜欢画画写字的数据,[]完全匹配
>db.users.find({like:'画画'})
//查找喜欢画画的数据,只要like中有画画都找出来,未完全匹配

$all 修饰符

相当于,与的意思

>db.users.find({like:{$all:['画画','打篮球']}})
//既找出画画又找出打篮球的数据

$in 修饰符

相当于或者的意思

>db.users.find({like:{$in:['游泳','学习']}})
//查询喜欢游泳或者学习的数据

$size

$size可以根据数组的数量查询出结果

>db.users.find({like:{$size:5}})
//查询出like的数量为5的数据

find 的参数

query:这个就是查询条件,MongoDB 默认的的一个参数

fields:查询出来后显示的结果样式,可以用 true 和 false 控制是否显示。

limit:返回的数量,后边跟数字,控制每次查询返回的结果数量。

skip:跳过多少个显示

sort:排序方式,从小到大排序使用 1,从大到小排序使用-1

我们可以用这个实现分页

>db.users.find().limit(8).skip(8).sort({age:-1})
//返回8条数据,跳过8条数据