mongodb基本指令与高级查询指令以及聚合命令
一、MongoDB中关于database的基本指令
1 ###关于database的基本指令 2 #查询当前使用的数据库指令 3 db 4 5 #查询所有的数据库指令 6 show dbs#或者:show databases 7 8 #切换数据库指令 9 use db_name 10 11 #删除当前数据库指令 12 db.dropDatabase()
二、MongoDB中关于集合的创建及基本增删改查指令
1、集合创建(集合相当于mysql里的表)
1 ###不手动创建集合 2 #向不存在的集合中第一次加入数据时,集合会被创建出来 3 4 ###手动创建集合 5 db.createCollection(name,options) 6 7 #例如创建集合test 8 db.createCollection(test) 9 10 db.createCollection(test,{capped:true,size:10}) 11 #参数capped:默认值为false表示不设置上限,值为true表示设置上限;参数size:当capped值为true时,需要指定此参数,表示上限大小,当文档达到上限时,会将之前的数据覆盖,单位为字节 12 13 #查看集合 14 show collections 15 16 #删除集合 17 db.collection_name.drop()
2.集合中的数据类型
1、Object ID :文档ID
2、String:字符串,最常用,必须是有效的UTF-8
3、Boolean:存储一个布尔值,True或false
4、integer:整数可以是32位或64位,取决于服务器
5、Double:存储浮点值
6、Arrays:数据或列表,多个值存储到一个键
7、Object:用于嵌入式的文档,即一个值为一个文档
8、Null:存储Null值
9、Timestamp:时间戳,表示从1970-1-1到现在的总秒数
10、Date:存储当前日期或时间的UNIX时间格式
注:每个文档都有一个属性,为_id,保证每个文档的唯一性,
可以自己去设置_id插入文档,如果没有提供,那么MongoDB为每个文档提供了一个独特的_id,类型为Object ID
Object ID是一个12字节的十六进制数:
前4个字节为当前时间戳
接下来3个字节为机器ID
接下来的2个字节为MongoDB的服务器进程id
最后3个字节为简单的增量值
创建日期语句如下:参数的格式为YYYY-MM-DD,具体指令为:
new Date("2017-12-20")
3、插入数据
插入文档时,如果不指定_id参数,MongoDB会为文档分配一个唯一的Objectid
1 db.collection_name.insert(document) 2 3 db.test.insert({name:"gi",gender:1})#向test集合插入数据{name:"gi",gender:1} 4 5 db.test.insert({_id:"20181125",name:"gi",gender:1})#向test集合插入数据{_id:"20181125"name:"gi",gender:1}
1 ###Mong0DB插入数据 2 db.collection.insert({})#插入数据,“_id”存在就报错 3 db.collection.save({})#插入数据,如果文档的“_id”存在就会更新数据,如果文档的“_id”不存在则添加数据
4、删除数据
db.集合名称.remove(<query>,{justOne:<boolean>})
参数query:可选,删除的文档的条件
参数justOne:可选,如果设为True或1,则只删除一条,默认false,表示删除多条
1 ###MongDB删除数据 2 db.test.remove({name:"xiaowang"},{justOne:true}) 3 #默认情况会删除所有满足条件的数据,{justOne:true}能达到只删除一条的效果
5、更新数据
指令:db.集合名称。update(<query>,<update>,{multi:<boolean>})
参数query:查询条件
参数update:更新操作符
参数multi:可选,默认是false,表示只更新找到的第一条记录,值为True表示把所有满足条件的文档全部更新。
注意:“multi update only works with $ operators”(multi 只和$一起使用)
1 ###MongoDB更新数据 2 db.test.update({name:"xiaoming"},{name:"xiaozhang"}) 3 #把名字为xiaoming的数据替换为{name:"xiaozhang"},注意此时是整条数据被替换成{name:"xiaozhang"} 4 5 db.test.update({name:"xiaoming"},{$set:{name:"xiaozhang"}}) 6 #把name为xiaoming的数据name值更新为xiaozhang,注意此时只是这条数据的name被更新了,其他不变,且只更新数据集中的符合条件的第一条数据 7 8 db.test.update({name:"xiaoming"},{$set:{name:"xiaozhang"}},{multi:true}) 9 #{multi:true}可以达到更新多条数据的目的
6、查询数据
1、方法find():查询
db.集合名称.find({条件文档})
2、方法findOne():查询,只返回第一个
db.集合名称.findOne({条件文档})
3、方法pretty():将结果格式化
db.集合名称.find({条件文档}).pretty()
7、高级查询
1、比较运算符
等于:默认是等于判断,没有运算符
小于:$it (less than)
小于等于:$ite (less than equal)
大于:$gt (greater than)
大于等于:$gte (greater than equal)
不等于:$ne
db.test.find({age:{$gte:18}}) #test中年龄大于等于18的记录
2.范围运算符
使用“$in”,"$nin"判断是否在某个范围内
db.test.find({age:{$in:[18,28,38]}}) #查询年龄为18,28,28的test中的记录
3、逻辑运算符
and:在json中写多个条件即可
db.test.find({age:{$gte:18},gender:true}) #查询年龄大于或等于18,并且性别为true的学生
or:使用$or,值为数组,数组中每个元素为json
db.test.find({$or:[{age:{$gt:18}},{gender:false}]}) #查询年龄大于18,或性别为false的学生
db.test.find({$or:[{age:{$gte:18}},{gender:true}],name:"gi"}) #查询年龄大于18或性别为男生,并且姓名为“gi”
4、正则表达式
使用//或$regex编写正则表达式
db.test.find({sku:/^abc/}) #sku标签中以abc开头的记录db.test.find({sku:{$regex:"789$"}}) #sku标签中以789$结尾的记录
5、limit和skip
方法limit():用于读取指定数量的文档
db.集合名称.find().limit(NUMBER)
db.test.find().limit(2) #查询test集合中的前两条记录
方法skip():用于跳过指定数量的文档
db.集合名称.find().skip(NUMBER)
db.test.find().skip(2) #跳过test集合中的前两条数据,
同时使用skip和limit(可实现翻页功能)(一般先使用skip,再使用limit,这样效率高)
db.test.find().skip(2).limit(2)db.test.find().limit(3).skip(2)
6、自定义查询
使用$where后面写一个函数,返回满足条件的数据
#查询年龄大于30 的学生 db.test.find({$where:function(){return this.age>30;}})
7、投影
在查询到的返回结果中,只选择必要的字段
db.集合名称。find({},{字段名称:1,...})
参数为字段与值,值为1表示显示,值为0表示不显示
特殊:对于_id列默认是显示的,如果不显示需要明确设置为0
#test输出只显示name列和gender列 db.test.find({},{_id:0,name:1,gender:1})
8、排序
方法sort(),用于对集合进行排序
db.集合名称.find().sort({字段:1,...})
参数1为升序排列
参数-1为降序排列
#根据性别降序,在根据年龄升序 db.test.find().sort({gender:-1,age:1})
9、统计个数
方法count()用于统计结果集中文档条数
db.集合名称.find({条件}).count()
db.集合名称.count({条件})
db.test.find({gender:true}).count()db.test.count({age:{$gt:20},gender:true})
10、消除重复
方法distinct()对数据进行去重
db.集合名称.distinct("去重字段":{条件})
db.test.distinct("hometown",{age:{$gt:18}})
8、聚合
聚合(aggregate)是基于数据处理的聚合管道,每个文档通过一个由多个阶段(stage)组成的管道,可以对每个阶段的管道进行分组、过滤、等功能,然后经过一系列的处理,输出相应的结果。
db.集合名称。aggregate({管道:{表达式}})
常用管道:
在MongoDB中,文档处理完毕后,通过管道进行下一次处理,常用管道如下:
$group:将集合中的文档分组,可以用于统计结果
$match:过滤数据,只输出符合条件的文档
$project:修改输入文档的结构,如重命名、增加、删除字段、创建计算结果
$sort:将输出文档排序后输出
$limit:限制聚合管道返回的文档书数
$skip:跳过指定数量的文档,并返回余下的文档
$unwind:将数组类型的字段进行拆分
表达式
处理输入文档并输出
语法:表达式:“$列名”
常用表达式
$ sum:计算总和,$sum:1表示以一倍计数
$avg:计算平均值
$min:获取最小值
$max:获取最大值
$push:在结果文档中插入值到一个数组中
$first:根据资源文档的排序获取第一个文档数据
$last:根据资源文档的排序获取最后一个文档数据
$group对应的字典中有几个键,结果中就有几个键
分组依据需要放在_id后面
取不同的字段的值需要使用$,"$age"、“$gender”
取字典嵌套的字典中的值的时候“$_id.country”
能够同时按照多个建进行分组“{$group:{_id:{country:$country,province:"$province"}}}”
结果是:{_id:{country:"",province:""}}
#统计男生、女生总人数 db.test.aggregate({¥group:{_id:"$gender",counter:{$sum:1}}})
#Group by null #将所有文档分为一组 #求学生总人数、平均年龄 db.test.aggregate({$group:{_id:null,counter:{$sum:1},avgAge:{$avg:"$age"}}})
$project:修改输入文档的结构,如重命名、增加、删除字段、创建计算结果
#查询学生的姓名和年龄 db.stu.aggregate({$project:{_id:0,name:1,age:1}})
#查询男生、女生人数,输出人数 db.stu.aggregate({$group:{_id:"$gender",counter:{$sum:1}}},{$project:{_id:0,counter:1}})
db.stu.aggregate({$group:{_id:"$gender",count:{$sum:1},aug_age:{$avg:$age}}},{$project:{gender:"$_id",count:"$count",avg_age:"$avg_age"}})
$match:过滤数据,只输出符合条件的文档
#查询年龄大于20 的学生 db.test.aggregate({$match:{age:{$gt:20}}})
#查询年龄大于20 的男生、女生人数 db.test.aggregate({$match:{age:{$gt:20}}},{$group:{_id:"$gender",counter:{$sum:1}}})
$sort:将输出文档排序后输出
#查询学生信息,按年龄升序 db.stu.aggregate({$sort:{age:1}})
#查询男生和女生人数,按人数的降序排序 db.stu.aggregate({$group:{_id:"gender",count:{$sum:1}}},{$sort:{count:-1}})
$limit:限制聚合管道返回的文档书数
#显示前两条记录 db.test.aggregate({$limit:2})
$skip:跳过指定数量的文档,并返回余下的文档(一般先使用skip,再使用limit)
#跳过指定2条数量记录 db.test.aggregate({$skip:2})
$unwind:将数组类型的字段进行拆分
db.集合名称.aggregate({$unwind:"$字段名称"})
db.test.insert({_id:1,item:"t-shirt",size:["S","M","L"]}) db.test.aggregate({$unwind:"$size"})
结果如下:
{“_id”:1,"item":"t-shirt","size":"S"}
{“_id”:1,"item":"t-shirt","size":"M"}
{“_id”:1,"item":"t-shirt","size":"L"}
属性perserveNullAndEmptyArrays,值为false表示丢弃属性值为空的文档
属性perserveNullAndEmptyArrays,值为true表示保留属性值为空的文档
用法:db.test.aggregate({$unwind:{path:"$size",perserveNullAndEmptyArrays:true}})
#perserveNullAndEmptyArrays:true #防止数据丢失
转载于:https://www.cnblogs.com/zhiliang9408/p/10013958.html
mongodb基本指令与高级查询指令以及聚合命令相关推荐
- educoder MongoDB 文档的高级查询操作
第1关:数据的导入导出 mongoimport -d mydb1 -c test --type csv --headerline --ignoreBlanks --file /home/example ...
- mysql的高级查询实例_mysql高级查询实例及cmd命令.doc
mysql高级查询实例及cmd命令.doc 还剩 19页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,很抱歉,此页已超出免费预览范围啦! 如果喜欢就下载吧,价低环保! 内容要点: sele ...
- MongoDB 文档的高级查询操作
第1关:数据的导入导出 本关任务:向数据库导入数据和从数据库导出数据. 第2关:高级查询(一) 本关任务:根据编程要求完成文档查询. 第3关:高级查询(二) 本关任务:根据编程要求完成文档查询. 第4 ...
- 头歌 MongoDB 文档的高级查询操作(全部关卡)
第一关 mongoimport -d mydb1 -c test --type csv --headerline --ignoreBlanks --file /home/example/student ...
- 搜索引擎高级搜索指令
搜索引擎高级搜索指令 用户除了可以在搜索引擎搜索普通关键词外,还可以使用一些特殊的高级搜索指令 .高级搜索指令就是为了达到用户的直接目的,排除用户不需要的消息. https://jingyan.bai ...
- mysql数据库高级查询笔记_MySQL数据库基础——高级查询
MySQL数据库入门--day08 高级查询 一.聚合函数: 在实际开发过程中经常需要对数据进行统计,为此MySQL中提供了一些函数来实现某些功能如下表所示: 聚合函数 1.COUNT()函数: CO ...
- 04数据库的高级查询
高级查询 数据统计分析 聚合函数 统计员工平均月收入? SELECT AVG(sal+IFNULL(comm,0)) AS avg FROM t_emp; SELECT SUM(sal) FROM t ...
- 【MySQL】数据库的高级查询
前言 上次我们讲了数据库的基本查询,这次继续接上来数据库的高级查询.高级查询是建立在基础查询的基础上面的,如果你还没有看过建议你先去学习数据库的基础查询. 传送门:MySQL数据库的基本查询 数据库的 ...
- MySQL:单表查询---简单查询+条件查询+高级查询+表和字段取别名
目录 一.通用模版展示 简单查询 条件查询 高级查询 表和字段取别名 二.举例说明 简单查询 条件查询 高级查询 表和字段取别名 三.注意事项 四.Mapper简单举例 简单查询 条件查询 高级查询 ...
最新文章
- 2017海克斯康拉斯维加斯美国大会 精彩即将开始
- ubuntu18.04上安装ffmpeg
- STM32接口FSMC/FMC难点详解
- windows环境下新建.txt文件,使其默认以UTF-8编码
- Mac OS X Leopard 10.5.5 安裝手记 (Dell D830)
- redis mysql 集群_Redis(五)、Redis数据库集群相关
- 线程打印_Java编程核心技术之——线程操作
- Redis中的数据结构与常用命令
- (PotPlayer)Windows视频播放神器
- Kardashev量表和AI:可能的床友
- 程序上下文切换,什么是上下文?
- 基于 FFMPEG 的视频解码(libavcodec ,致敬雷霄骅)
- Python爬虫之字体解密 | 以滑雪为例演示大众点评商铺信息采集
- 音频编码之aac编码原理
- 【听课笔记】复旦大学遗传学_04连锁与交换
- 计算机的好处和坏处的英语作文,电脑利与弊英语作文
- 卖家后台管理项目效果预览
- 解放双手!用 Python 控制你的鼠标和键盘
- 如何在本地进行一个IP访问多个域名
- 景深与图像清晰的关系