mongoDB常用命令

▼魔方 西西 提交于 2020-02-21 18:54:24

mongoDB数据库命令
一、MongoDB简介
在这里插入图片描述

mongodb 文档数据库,存储的是文档(Bson->json的二进制化).

json数据存储的就是js中对象和数组。

{name:‘zhangsan’,age:‘9’}

MongoDB特点:内部执行引擎为JS解释器,。

把文档存储成bson结构,在查询时,转换为JS对象,并可以通过熟悉的js语法来操作.
mongo和传统型数据库相比,最大的不同:

传统型数据库: 结构化数据, 定好了表结构后,每一行的内容,必是符合表结构的,就是说–列的个数,类型都一样.

mongo文档型数据库: 集合中存储的每篇文档,都可以有自己独特的结构(json对象都可以有自己独特的属性和值)

mongo数据库的collection不用提前创建(可以隐式创建。)。关系型数据库的表必须提前创建表的

mongodb数据库bin目录下的文件意义
在这里插入图片描述

查看数据库
show dbs
创建数据库
mongoDB的数据库是隐式创建的
步骤
use 不存在的库名
创建表
在 这个 库里边 创建集合(也就是表),或者直接插入数据就创建好了。
在这里插入图片描述

删除集合(数据表)
db.collectionName.drop() //删除集合(数据表)
在这里插入图片描述

删除数据库
db.dropDatabase() //删除数据库
在这里插入图片描述

注意 数据库中的集合为空(也就是数据表)为空时,数据库自动删除!

mongoDB CRUD(增删改查)命令
增加 insert()
db.collectionName.insert(document)
增加一个文档

db.collectionName.insert({key:value})
增加文档并且 指定id值

这里需要注意的是一般不指定情况下有默认的ID值
db.collectionName.insert({_id:num_value,key:value,key:value})
增加多个文档

db.collectionName.insert([{key:value},key:value},key:value}])
修改update()
db.collection.update(查询表达式,新值,选项)
改成什么样? – 新值 或 赋值表达式
操作选项 ----- 可选参数
举例:

db.stu.update({name:‘zs’},{name:‘zl’})
当我们执行该操作之后可以看到,文档修改为{name:‘zl’},文档中的其他列不见了,只剩下_id和name列,是新文档,替换了旧文档,而不是修改。

如果是想修改文档的某列,可以用$set关键字:

$set:修改某列的值:也可以给某个列添加一个field

举例:

db.stu.update({name:‘ls’},{$set:{name:‘gz’}})

查询到name为 ls的这条数据,使用$set来保证只是修改这个列 name为gz 不删除其他列内容

修改时的赋值表达式

$set 修改某列的值

$unset 删除某个列

举例:

db.stu.update({name:‘gz’},{$unset:{age:1}})

查询到 name为 gz的这条数据,删除age这一列,1代表确认删除,当然你指定0就删除不了了

$rename 重命名某个列

举例:

db.stu.update({name:‘gz’},{$rename:{name:‘new_name’}})

查询到 name为gz的这条数据,修改name列为new_name

$inc 增长某个列

举例:

db.stu.update({name:‘ch’},{$inc:{age:12}})

查询到name为ch这一列,给age字段的value加12

Option的作用:{upsert:true/false,multi:true/false}

Upsert—有则更新,无则插入。

Multi: True—>更新所有,false更新一条

举例:

db.trade.update({name:‘ch’},{$set:{gender:1}},{upsert:true})

查询 到 name 为 ch的数据,如果 gender字段存在,则修改值,否则就添加gender字段

db.news.update({_id:99},{x:123,y:234},{upsert:true})

如果没有_id=99的文档被修改,就直接插入该文档

db.stu.update({age:{KaTeX parse error: Expected 'EOF', got '}' at position 6: gt:10}̲},{set:{age:30}},{upsert:true})

multi: 是指修改多行(即使查询表达式命中多行,默认也只改1行,如果想改多行,可以用此选项)

查找find()
语法: db.collection.find(查询表达式,查询的列)
db.collections.find(表达式,{列1:1,列2:1})
在查询的列参数中,1表示显示,0表示不显示

查询所有文档 所有内容

db.document.find()
查询所有文档,的name属性 (_id属性默认总是查出来)

db.document.find({},{name:1})
查询所有文档的gender属性,且不查询_id属性

db.document.find({gender:1},{name:1,_id:0});
查询所有的内容,并且格式化显示

db.document.find()…pretty()
MongoDB 的 find() 方法可以传入多个键(key),每个键(key)以逗号隔开,及常规 SQL 的 AND 条件

db.document.find({key1:value1, key2:value2}).pretty()
常用方法:

limit() 限制条数
db.document.find().limit(number)
skip() 跳过过少条目数量
db.document.find().limit(number).skip(number)
3. sort() 排序 1为升序,-1为降序
db.document.find().sort({KEY:1})
count() 计数
db.find().count()
查询表达式
最简单的查询表达式

{filed:value} ,是指查询field列的值为value的文档

$lt小于

举例:

db.stu.find({age:{$lt:40}},{})

查询age小于40岁的所有人的所有信息

$lte小于等于

$gt 大于

举例:

db.stu.find({age:{$gt:10}},{})

查询 age大于 10岁的所有人的所有信息

$gte大于等于

$ne != 不等于

db.stu.find({age:{$ne:10}},{})

查询 age不等于10岁的所有人的所有信息

$nin --> not in 不在一个选择区域内

db.stu.find({age:{$nin:[10,20,50]}},{})

查询所有的 age不在 列表中的 所有人的 所有信息

$all:指数组所有单元匹配,就是指我指定的内容都要有,通过一个list来指定

db.stu.find({hobby:{$all:[‘book’]}},{})

查询所有的 学生 爱好都有读书的

$exists 含有该字段的文档

db.stu.find({he:{$exists:1}},{})

查询 所有的 学生 拥有he这个字段的文档

(nor {)nor:[条件1,条件2]} 是指 所有条件都不满足的文档为真返回

db.trade.find({$nor:[{age:3},{age:18}]},{})

查询 age为3 或者 age为 18 两个 都不满足的 其他文档

(and {)and:[条件1,条件2]} 是指 所有条件都满足,就为真

(or{)or:[条件1,条件2]} 是指 条件1和条件2有一个满足,就为真

删除remove
语法:

db.collection.remove(查询表达式, 选项)
1: 查询表达式依然是个json对象 {age:20}

2: 查询表达式匹配的行,将被删掉.

3: 如果不写查询表达式,collections中的所有文档将被删掉

举例:

1.删除学生age小于18的所有信息

db.stu.remove({age:{$lt:18}})
2.删除学生age小于18的所有信息,只删除一行

db.stu.remove({age:{$lt:18},true})

MongoDB 聚合(db.col.aggregate())

MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。有点类似sql语句中的 count(*)。

语法:

db.COLLECTION_NAME.aggregate(
[
{管道1},
{管道2},
{管道3},

]
)
MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理,管道操作是可以重复的。

聚合框架中常用的几个管道操作:
在这里插入图片描述
$project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
(match:用于过滤数据,只输出符合条件的文档。)match使用MongoDB的标准查询操作。
$limit:用来限制MongoDB聚合管道返回的文档数。
$skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。
$group:将集合中的文档分组,可用于统计结果。
$sort:将输入文档排序后输出。
group中的操作表达式:

聚合操作练习:

1.查询所有的学生数量

db.stu.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: …p:{_id:null,t:{sum:1}}}])

统计 stu的 所有学生数量 _id必须是第一个参数 不要问我 为什么 我也不晓得,

2.查询出年龄大于18的学生

db.stu.aggregate([{KaTeX parse error: Expected '}', got 'EOF' at end of input: match:{age:{gt:18}}},{KaTeX parse error: Expected '}', got 'EOF' at end of input: group:{_id:'class_id’,t:{$sum:1}}}])

查询出所有的 年龄大于 18的学生 并且根据班级id进行分组 统计个数

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!