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进行分组 统计个数
来源:CSDN
作者:weixin_45611222
链接:https://blog.csdn.net/weixin_45611222/article/details/104423566