MangoDB学习笔记
- 01. 数据库操作
- 1. 查看当前数据库名称
- db
- 2. 查看所有数据库名称,列出所有在物理上存在的数据库
- show dbs;
- 3. 切换数据库,如果数据库不存在也并不创建,直到插入数据或创建集合时数据库才被创建
- use 数据库名称
- 4. 删除当前指向的数据库,如果数据库不存在,则什么也不做
- db.dropDatabase()
- 02. 集合操作
- 01. 创建集合
- 1. 不限制集合大小
- db.createCollection(name)
- 2. 限制集合大小
- db.createCollection(name, { capped : true, size : 10 } )
- name 创建的集合名
- capped 默认值为false表示不设置上限,值为true表示设置上限
- size 当capped值为true时,需要指定此参数,表示上限大小,当文档达到上限时,会将之前的数据覆盖,单位为字节
- 02. 查看当前数据库的集合
- show collections
- 03. 删除集合
- db.集合名称.drop()
- 04. 当前集合的状态
- db.集合名.stats()
- 03. 数据类型
- Object ID 文档ID
- 每个文档都有一个属性,为_id,保证每个文档的唯一性
- 可以自己去设置_id插入文档
- 如果没有提供,那么MongoDB为每个文档提供了一个独特的_id,类型为objectID
- objectID是一个12字节的十六进制数
- 前4个字节为当前时间戳
- 接下来3个字节的机器ID
- 接下来的2个字节中MongoDB的服务进程id
- 最后3个字节是简单的增量值
- String 字符串,最常用,必须是有效的UTF-8
- Boolean 存储一个布尔值,true或false
- Integer 整数可以是32位或64位,这取决于服务器
- Double 存储浮点值
- Arrays 数组或列表,多个值存储到一个键
- Object 用于嵌入式的文档,即一个值为一个文档
- Null 存储Null值
- Timestamp 时间戳,表示从1970-1-1到现在的总秒数
- Date 存储当前日期或时间的UNIX时间格式
- 创建日期语句如下
- 注意:参数的格式为YYYY-MM-DD
- new Date('2017-12-20')
- 04. 数据的增删改
- 1. 插入数据(可以不用事先创建集合而直接使用)
- db.集合名称.insert(document)
- 2. 更新数据
- db.集合名称.update(<query>, <update>, {multi: <boolean>})
- query 查询条件
- update:更新操作符,类似sql语句update中set部分
- 1. 当为一个文档时,则用这个文档替换查询到的文档
- 2. 通过$set更新指定的列{$set:{列:值}},如果列不存在,则会新添加一列。
- 3. 通过$unset删除指定的字段{$unset:{字段:''}}
- multi:可选,默认是false,表示只更新找到的第一条记录,值为true表示把满足条件的文档全部更新
- 3. 保存
- db.集合名称.save(document)
- 如果document指定了_id,则修改,没有指定则添加到集合。
- 4. 删除数据
- db.集合名称.remove(<query>, {justOne: <boolean>})
- query 可选,删除的文档的条件
- justOne 可选,如果设为true或1,则只删除一条,默认false,表示删除多条
- 05. 查询
- 01. 基本查询
- 1. db.集合名称.find({条件文档}) 根据条件查询
- 2. db.集合名称.findOne({条件文档}) 只查询一条数据
- 3. db.集合名称.find({条件文档}).pretty() 将结果格式化
- 02. 比较运算符
- $lt 相当于< 例如:{age:{$lt:20}} 相当于age<20
- $lte 相当于<=
- $gt 相当于>
- $gte 相当于>=
- $ne 相当于!=
- 03. 逻辑运算符
- 1. 在{}中写的多个条件相当于and
- {age:18, gerder:false} 相当于age=18 and gender=false
- 2. 或运算 $or
- {$or:[{},{}...]} 所有条件写在[]中
- 04. 范围运算符
- $in $nin
- {age:{$in:[18,20]}} 相当于age=18或者age=20
- 05. 正则表达式
- 方法1:正则表达式放在//中
- {name:/师$/} name以师结尾
- 方法2:
- {name:{$regex:师$}} name以师结尾
- 06. 自定义查询
- 使用$where后面写一个js函数,返回满足条件的数据
- 对集合中所有的数据执行函数,如果返回true,则该条数据有效,否则过滤掉这条数据
- 如:
- db.stu.find({
- $where:function() {
- return this.age > 30;
- }
- })
- 07. 分页查询
- db.集合名称.find().skip(m).limit(n)
- 跳过m条数据选择n条
- 其中skip()和limit()可以互换位置而不影响结果
- 08. 投影
- 在一条文档中选择其中的几个字段
- db.集合名称.find({条件},{字段名称:1,...})
- _id默认为显示,为0则表示不显示,其他字段若不想显示则不写即可,写为0反而会报错
- 1表示显示该字段
- 09. 排序
- db.集合名称.find().sort({字段:1,...})
- 参数1表示升序
- 参数-1表示降序
- 10. 统计个数
- 写法1: db.集合名称.find({条件}).count()
- 写法2 db.集合名称.count({条件})
- 11. 去重
- db.集合名称.distinct('去重字段',{条件})
- 06. 聚合
- 01. 介绍
- 聚合(aggregate)主要用于计算数据,类似sql中的sum()、avg()
- 02. 语法
- db.集合名称.aggregate({管道:{表达式}})
- 管道 在Unix和Linux中一般用于将当前命令的输出结果作为下一个命令的输入;在mongodb中,管道具有同样的作用,文档处理完毕后,通过管道进行下一次处理
- 表达式 '$列表' 处理输入文档并输出 '$列表'
- 03. 常见管道
- 01. $group:将集合中的文档分组,可用于统计结果
- _id 表示分组的依据,倘若写为Null,则把整个集合当做一组
- 如:统计男生女生的总人数
- db.stu.aggregate(
- {$group:
- {
- _id:'$gender',
- counter:{$sum:1}
- }
- }
- )
- 02. $match:过滤数据,只输出符合条件的文档
- 如:查询年龄大于20的男生、女生人数
- db.stu.aggregate(
- {$match:{age:{$gt:20}}},
- {$group:{_id:'$gender',counter:{$sum:1}}}
- )
- 03. $project:修改输入文档的结构,如重命名、增加、删除字段、创建计算结果
- 如:查询男生、女生人数,输出人数
- db.stu.aggregate(
- {$group:{_id:'$gender',counter:{$sum:1}}},
- {$project:{_id:0,counter:1}}
- )
- 04. $sort:将输入文档排序后输出
- 如:查询男生、女生人数,按人数降序
- db.stu.aggregate(
- {$group:{_id:'$gender',counter:{$sum:1}}},
- {$sort:{counter:-1}}
- )
- 05. $limit:限制聚合管道返回的文档数
- 06. $skip:跳过指定数量的文档,并返回余下的文档
- 如:统计男生、女生人数,按人数升序,取第二条数据
- db.stu.aggregate(
- {$group:{_id:'$gender',counter:{$sum:1}}},
- {$sort:{counter:1}},
- {$skip:1},
- {$limit:1}
- )
- 注意:
- 聚合中的skip和limit顺序不能写反
- 07. $unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值
- 1. 语法:
- 语法1. db.集合名称.aggregate({$unwind:'$字段名称'})
- 语法2
- db.集合名称.aggregate({
- $unwind:{
- path:'$字段名称', #拆分的字段名
- preserveNullAndEmptyArrays:<boolean> #防止数据丢失
- }
- })
- 2. 解释
- 对于语法1,如果某条记录该字段为NULL,空数组或者没有该字段则这条记录就会丢弃不显示在结果集中
- 对于语法2,属性preserveNullAndEmptyArrays值为true表示保留属性值为空的文档,为false则丢弃
- 04. 常见表达式
- $sum:计算总和,$sum:1 表示以一倍计数
- $avg:计算平均值
- $min:获取最小值
- $max:获取最大值
- $push:在结果文档中插入值到一个数组中,例如根据性别分组后,可以把当前性别这一组中的所有人的名字放到一个字段中
- {$push:'$字段名'}
- {$push:'$$ROOT'}将文档所有内容加入到结果集中
- $first:根据资源文档的排序获取第一个文档数据
- $last:根据资源文档的排序获取最后一个文档数据
- 07. 索引
- 1. 创建索引
- 1. 创建索引
- db.集合.ensureIndex({属性:1})
- 参数1表示升序,-1表示降序
- 2. 创建多列索引
- db.集合名.ensureIndex({属性1:1,属性2:1})
- 查找时,只有包含第一个属性,索引才会生效
- 3. 创建唯一索引
- db.集合名.ensureIndex({属性:1},{unique:true})
- 集合中有重复数据无法创建
- 创建索引后仍可以插入重复数据
- 4.添加数据时,没有指定_id,自动创建_id,且给_id创建索引
- 2. 查看索引
- db.集合名.getIndexes()
- 3. 删除索引
- db.集合名.dropIndex(索引名)
- 08 数据备份
- mongodump -h dbhost -d dbname -o dbdirectory
- -h:服务器地址,也可以指定端口号,在本机上备份可以不用指定该项
- -d:需要备份的数据库名称
- -o:备份的数据存放位置,此目录中存放着备份出来的数据
- 09. 数据恢复
- mongorestore -h dbhost -d dbname --dir dbdirectory
- -h:服务器地址,在本机上备份可以不用指定该项
- -d:需要恢复的数据库名
- --dir:备份数据所在位置
- 10. 用户管理
- MongoDB中创建用户,只能在某个数据库上创建用来管理这个数据库的指定角色的用户
- 常见角色:
- root: 只在 admin 数据中可使用,超级账户,超级权限
- Read: 允许用户读取指定的数据库
- readWrite: 允许用户读写指定的数据库
- 1. 创建超级用户
- use admin
- db.createUser(
- {
- user:'admin',
- pwd:'',
- roles:[{role:'root',db:'admin'}]
- }
- )
- 2. 创建普通用户
- 1. 使用admin登录
- 2. use demo
- 3. db.createUser(
- {
- user:'用户名',
- pwd:'密码'
- roles:[{role:'readWrite',db:'demo'}]
- }
- )
- 3. 启用安全验证
- 1. 修改配置文件
- vi /etc/mongod.conf
- security:
- authorization: enabled
- 2. 重启服务
- sudo service mongod restart
- 4. 使用用户登录
- mongo -u 用户名 -p 密码 --authenticationDatabase 数据库名
- 5. 修改用户
- 1. 修改密码
- db.updateUser('用户名',{pwd: ''})
- 2. 修改角色
- db.updateUser('用户名',{roles:[{role: 'read',db:'demo'}]})
MangoDB学习笔记的更多相关文章
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- 2014年暑假c#学习笔记目录
2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
- seaJs学习笔记2 – seaJs组建库的使用
原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...
- CSS学习笔记
CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...
- HTML学习笔记
HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...
- DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记
今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...
随机推荐
- C#后台解析 json 动态解析 通用(Dictionary)
Dictionary<string, object> suggestions = JSONSerializer.Deserialize<Dictionary<string, o ...
- 深入浅出的理解框架(Struts2、Hibernate、Spring)与 MVC 设计模式
现在许许多多的初学者和程序员,都在趋之若鹜地学习Web开发的宝典级框架:Struts2,Spring,Hibernate.似乎这些框架成为了一个人是否精通Java,是否会写J2EE程序的唯一事实标准和 ...
- tomcat支持https的server.xml配置
访问地址:https://127.0.0.1/testWeb/mySevlet?url=123&action=aaa server.xml: <?xml version='1.0' en ...
- 奇怪吸引子---LorenaMod1
奇怪吸引子是混沌学的重要组成理论,用于演化过程的终极状态,具有如下特征:终极性.稳定性.吸引性.吸引子是一个数学概念,描写运动的收敛类型.它是指这样的一个集合,当时间趋于无穷大时,在任何一个有界集上出 ...
- Redis源码学习-Master&Slave的命令交互
0. 写在前面 Version Redis2.2.2 Redis中可以支持主从结构,本文主要从master和slave的心跳机制出发(PING),分析redis的命令行交互. 在Redis中,serv ...
- 学习Spring-Session+Redis实现session共享
1.添加依赖 <dependency> <groupId>org.springframework.session</groupId> <artifactId& ...
- PC高级语言与施耐德、罗克韦尔、台达等PLC的Modbus通讯源代码(ModbusTCP.DLL/ModbusRTU.DLL)
1.0 通讯组件概述 该类通讯组件适用于基于PC高级语言的工业自动化控制系统,用于PC与可编程控制器(PLC).智能仪表等进行数据通讯.组件采用动态链接库文件(*.DLL)的形式,在PC系统的项目工 ...
- C#中Invoke的用法1
invoke和begininvoke 区别 一直对invoke和begininvoke的使用和概念比较混乱,这两天看了些资料,对这两个的用法和原理有了些新的认识和理解. 首先说下,invoke和be ...
- pid 控制算法
http://blog.csdn.net/huangkangying/article/details/78129148 https://zh.wikipedia.org/wiki/PID%E6%8E% ...
- Android——SeekBar(拖动条)相关知识总结贴
Android进度条(ProgressBar)拖动条(SeekBar)星级滑块(RatingBar)的例子 http://www.apkbus.com/android-51326-1-1.html A ...