1. 01. 数据库操作
  2. 1. 查看当前数据库名称
  3. db
  4. 2. 查看所有数据库名称,列出所有在物理上存在的数据库
  5. show dbs;
  6. 3. 切换数据库,如果数据库不存在也并不创建,直到插入数据或创建集合时数据库才被创建
  7. use 数据库名称
  8. 4. 删除当前指向的数据库,如果数据库不存在,则什么也不做
  9. db.dropDatabase()
  10.  
  11. 02. 集合操作
  12. 01. 创建集合
  13. 1. 不限制集合大小
  14. db.createCollection(name)
  15. 2. 限制集合大小
  16. db.createCollection(name, { capped : true, size : 10 } )
  17. name 创建的集合名
  18. capped 默认值为false表示不设置上限,值为true表示设置上限
  19. size capped值为true时,需要指定此参数,表示上限大小,当文档达到上限时,会将之前的数据覆盖,单位为字节
  20.  
  21. 02. 查看当前数据库的集合
  22. show collections
  23.  
  24. 03. 删除集合
  25. db.集合名称.drop()
  26.  
  27. 04. 当前集合的状态
  28. db.集合名.stats()
  29.  
  30. 03. 数据类型
  31. Object ID 文档ID
  32. 每个文档都有一个属性,为_id,保证每个文档的唯一性
  33. 可以自己去设置_id插入文档
  34. 如果没有提供,那么MongoDB为每个文档提供了一个独特的_id,类型为objectID
  35. objectID是一个12字节的十六进制数
  36. 4个字节为当前时间戳
  37. 接下来3个字节的机器ID
  38. 接下来的2个字节中MongoDB的服务进程id
  39. 最后3个字节是简单的增量值
  40. String 字符串,最常用,必须是有效的UTF-8
  41. Boolean 存储一个布尔值,truefalse
  42. Integer 整数可以是32位或64位,这取决于服务器
  43. Double 存储浮点值
  44. Arrays 数组或列表,多个值存储到一个键
  45. Object 用于嵌入式的文档,即一个值为一个文档
  46. Null 存储Null
  47. Timestamp 时间戳,表示从1970-1-1到现在的总秒数
  48. Date 存储当前日期或时间的UNIX时间格式
  49. 创建日期语句如下
  50. 注意:参数的格式为YYYY-MM-DD
  51. new Date('2017-12-20')
  52.  
  53. 04. 数据的增删改
  54. 1. 插入数据(可以不用事先创建集合而直接使用)
  55. db.集合名称.insert(document)
  56.  
  57. 2. 更新数据
  58. db.集合名称.update(<query>, <update>, {multi: <boolean>})
  59. query 查询条件
  60. update:更新操作符,类似sql语句updateset部分
  61. 1. 当为一个文档时,则用这个文档替换查询到的文档
  62. 2. 通过$set更新指定的列{$set:{列:值}},如果列不存在,则会新添加一列。
  63. 3. 通过$unset删除指定的字段{$unset:{字段:''}}
  64.  
  65. multi:可选,默认是false,表示只更新找到的第一条记录,值为true表示把满足条件的文档全部更新
  66.  
  67. 3. 保存
  68. db.集合名称.save(document)
  69. 如果document指定了_id,则修改,没有指定则添加到集合。
  70.  
  71. 4. 删除数据
  72. db.集合名称.remove(<query>, {justOne: <boolean>})
  73. query 可选,删除的文档的条件
  74. justOne 可选,如果设为true1,则只删除一条,默认false,表示删除多条
  75.  
  76. 05. 查询
  77. 01. 基本查询
  78. 1. db.集合名称.find({条件文档}) 根据条件查询
  79. 2. db.集合名称.findOne({条件文档}) 只查询一条数据
  80. 3. db.集合名称.find({条件文档}).pretty() 将结果格式化
  81.  
  82. 02. 比较运算符
  83. $lt 相当于< 例如:{age:{$lt:20}} 相当于age<20
  84. $lte 相当于<=
  85. $gt 相当于>
  86. $gte 相当于>=
  87. $ne 相当于!=
  88.  
  89. 03. 逻辑运算符
  90. 1. 在{}中写的多个条件相当于and
  91. {age:18, gerder:false} 相当于age=18 and gender=false
  92. 2. 或运算 $or
  93. {$or:[{},{}...]} 所有条件写在[]中
  94.  
  95. 04. 范围运算符
  96. $in $nin
  97. {age:{$in:[18,20]}} 相当于age=18或者age=20
  98.  
  99. 05. 正则表达式
  100. 方法1:正则表达式放在//中
  101. {name:/师$/} name以师结尾
  102. 方法2
  103. {name:{$regex:师$}} name以师结尾
  104.  
  105. 06. 自定义查询
  106. 使用$where后面写一个js函数,返回满足条件的数据
  107. 对集合中所有的数据执行函数,如果返回true,则该条数据有效,否则过滤掉这条数据
  108. 如:
  109. db.stu.find({
  110. $where:function() {
  111. return this.age > 30;
  112. }
  113. })
  114.  
  115. 07. 分页查询
  116. db.集合名称.find().skip(m).limit(n)
  117. 跳过m条数据选择n
  118. 其中skip()和limit()可以互换位置而不影响结果
  119.  
  120. 08. 投影
  121. 在一条文档中选择其中的几个字段
  122. db.集合名称.find({条件},{字段名称:1,...})
  123. _id默认为显示,为0则表示不显示,其他字段若不想显示则不写即可,写为0反而会报错
  124. 1表示显示该字段
  125.  
  126. 09. 排序
  127. db.集合名称.find().sort({字段:1,...})
  128. 参数1表示升序
  129. 参数-1表示降序
  130.  
  131. 10. 统计个数
  132. 写法1 db.集合名称.find({条件}).count()
  133. 写法2 db.集合名称.count({条件})
  134.  
  135. 11. 去重
  136. db.集合名称.distinct('去重字段',{条件})
  137.  
  138. 06. 聚合
  139. 01. 介绍
  140. 聚合(aggregate)主要用于计算数据,类似sql中的sum()、avg()
  141. 02. 语法
  142. db.集合名称.aggregate({管道:{表达式}})
  143. 管道 UnixLinux中一般用于将当前命令的输出结果作为下一个命令的输入;在mongodb中,管道具有同样的作用,文档处理完毕后,通过管道进行下一次处理
  144. 表达式 '$列表' 处理输入文档并输出 '$列表'
  145.  
  146. 03. 常见管道
  147. 01. $group:将集合中的文档分组,可用于统计结果
  148. _id 表示分组的依据,倘若写为Null,则把整个集合当做一组
  149. 如:统计男生女生的总人数
  150. db.stu.aggregate(
  151. {$group:
  152. {
  153. _id:'$gender',
  154. counter:{$sum:1}
  155. }
  156. }
  157. )
  158. 02. $match:过滤数据,只输出符合条件的文档
  159. 如:查询年龄大于20的男生、女生人数
  160. db.stu.aggregate(
  161. {$match:{age:{$gt:20}}},
  162. {$group:{_id:'$gender',counter:{$sum:1}}}
  163. )
  164.  
  165. 03. $project:修改输入文档的结构,如重命名、增加、删除字段、创建计算结果
  166. 如:查询男生、女生人数,输出人数
  167. db.stu.aggregate(
  168. {$group:{_id:'$gender',counter:{$sum:1}}},
  169. {$project:{_id:0,counter:1}}
  170. )
  171. 04. $sort:将输入文档排序后输出
  172. 如:查询男生、女生人数,按人数降序
  173. db.stu.aggregate(
  174. {$group:{_id:'$gender',counter:{$sum:1}}},
  175. {$sort:{counter:-1}}
  176. )
  177. 05. $limit:限制聚合管道返回的文档数
  178. 06. $skip:跳过指定数量的文档,并返回余下的文档
  179. 如:统计男生、女生人数,按人数升序,取第二条数据
  180. db.stu.aggregate(
  181. {$group:{_id:'$gender',counter:{$sum:1}}},
  182. {$sort:{counter:1}},
  183. {$skip:1},
  184. {$limit:1}
  185. )
  186. 注意:
  187. 聚合中的skiplimit顺序不能写反
  188. 07. $unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值
  189. 1. 语法:
  190. 语法1. db.集合名称.aggregate({$unwind:'$字段名称'})
  191. 语法2
  192. db.集合名称.aggregate({
  193. $unwind:{
  194. path:'$字段名称', #拆分的字段名
  195. preserveNullAndEmptyArrays:<boolean> #防止数据丢失
  196. }
  197. })
  198.  
  199. 2. 解释
  200. 对于语法1,如果某条记录该字段为NULL,空数组或者没有该字段则这条记录就会丢弃不显示在结果集中
  201. 对于语法2,属性preserveNullAndEmptyArrays值为true表示保留属性值为空的文档,为false则丢弃
  202.  
  203. 04. 常见表达式
  204. $sum:计算总和,$sum:1 表示以一倍计数
  205. $avg:计算平均值
  206. $min:获取最小值
  207. $max:获取最大值
  208. $push:在结果文档中插入值到一个数组中,例如根据性别分组后,可以把当前性别这一组中的所有人的名字放到一个字段中
  209. {$push:'$字段名'}
  210. {$push:'$$ROOT'}将文档所有内容加入到结果集中
  211. $first:根据资源文档的排序获取第一个文档数据
  212. $last:根据资源文档的排序获取最后一个文档数据
  213.  
  214. 07. 索引
  215. 1. 创建索引
  216. 1. 创建索引
  217. db.集合.ensureIndex({属性:1})
  218. 参数1表示升序,-1表示降序
  219.  
  220. 2. 创建多列索引
  221. db.集合名.ensureIndex({属性1:1,属性2:1})
  222. 查找时,只有包含第一个属性,索引才会生效
  223.  
  224. 3. 创建唯一索引
  225. db.集合名.ensureIndex({属性:1},{unique:true})
  226. 集合中有重复数据无法创建
  227. 创建索引后仍可以插入重复数据
  228.  
  229. 4.添加数据时,没有指定_id,自动创建_id,且给_id创建索引
  230. 2. 查看索引
  231. db.集合名.getIndexes()
  232.  
  233. 3. 删除索引
  234. db.集合名.dropIndex(索引名)
  235.  
  236. 08 数据备份
  237. mongodump -h dbhost -d dbname -o dbdirectory
  238. -h:服务器地址,也可以指定端口号,在本机上备份可以不用指定该项
  239. -d:需要备份的数据库名称
  240. -o:备份的数据存放位置,此目录中存放着备份出来的数据
  241.  
  242. 09. 数据恢复
  243. mongorestore -h dbhost -d dbname --dir dbdirectory
  244. -h:服务器地址,在本机上备份可以不用指定该项
  245. -d:需要恢复的数据库名
  246. --dir:备份数据所在位置
  247.  
  248. 10. 用户管理
  249. MongoDB中创建用户,只能在某个数据库上创建用来管理这个数据库的指定角色的用户
  250. 常见角色:
  251. root: 只在 admin 数据中可使用,超级账户,超级权限
  252. Read: 允许用户读取指定的数据库
  253. readWrite: 允许用户读写指定的数据库
  254. 1. 创建超级用户
  255. use admin
  256. db.createUser(
  257. {
  258. user:'admin',
  259. pwd:'',
  260. roles:[{role:'root',db:'admin'}]
  261. }
  262. )
  263.  
  264. 2. 创建普通用户
  265. 1. 使用admin登录
  266. 2. use demo
  267. 3. db.createUser(
  268. {
  269. user:'用户名',
  270. pwd:'密码'
  271. roles:[{role:'readWrite',db:'demo'}]
  272. }
  273. )
  274.  
  275. 3. 启用安全验证
  276. 1. 修改配置文件
  277. vi /etc/mongod.conf
  278. security:
  279. authorization: enabled
  280.  
  281. 2. 重启服务
  282. sudo service mongod restart
  283.  
  284. 4. 使用用户登录
  285. mongo -u 用户名 -p 密码 --authenticationDatabase 数据库名
  286.  
  287. 5. 修改用户
  288. 1. 修改密码
  289. db.updateUser('用户名',{pwd: ''})
  290. 2. 修改角色
  291. db.updateUser('用户名',{roles:[{role: 'read',db:'demo'}]})

MangoDB学习笔记的更多相关文章

  1. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  2. PHP-自定义模板-学习笔记

    1.  开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2.  整体架构图 ...

  3. PHP-会员登录与注册例子解析-学习笔记

    1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...

  4. 2014年暑假c#学习笔记目录

    2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...

  5. JAVA GUI编程学习笔记目录

    2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...

  6. seaJs学习笔记2 – seaJs组建库的使用

    原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...

  7. CSS学习笔记

    CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...

  8. HTML学习笔记

    HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...

  9. DirectX Graphics Infrastructure(DXGI):最佳范例 学习笔记

    今天要学习的这篇文章写的算是比较早的了,大概在DX11时代就写好了,当时龙书11版看得很潦草,并没有注意这篇文章,现在看12,觉得是跳不过去的一篇文章,地址如下: https://msdn.micro ...

随机推荐

  1. C#后台解析 json 动态解析 通用(Dictionary)

    Dictionary<string, object> suggestions = JSONSerializer.Deserialize<Dictionary<string, o ...

  2. 深入浅出的理解框架(Struts2、Hibernate、Spring)与 MVC 设计模式

    现在许许多多的初学者和程序员,都在趋之若鹜地学习Web开发的宝典级框架:Struts2,Spring,Hibernate.似乎这些框架成为了一个人是否精通Java,是否会写J2EE程序的唯一事实标准和 ...

  3. tomcat支持https的server.xml配置

    访问地址:https://127.0.0.1/testWeb/mySevlet?url=123&action=aaa server.xml: <?xml version='1.0' en ...

  4. 奇怪吸引子---LorenaMod1

    奇怪吸引子是混沌学的重要组成理论,用于演化过程的终极状态,具有如下特征:终极性.稳定性.吸引性.吸引子是一个数学概念,描写运动的收敛类型.它是指这样的一个集合,当时间趋于无穷大时,在任何一个有界集上出 ...

  5. Redis源码学习-Master&Slave的命令交互

    0. 写在前面 Version Redis2.2.2 Redis中可以支持主从结构,本文主要从master和slave的心跳机制出发(PING),分析redis的命令行交互. 在Redis中,serv ...

  6. 学习Spring-Session+Redis实现session共享

    1.添加依赖 <dependency> <groupId>org.springframework.session</groupId> <artifactId& ...

  7. PC高级语言与施耐德、罗克韦尔、台达等PLC的Modbus通讯源代码(ModbusTCP.DLL/ModbusRTU.DLL)

    1.0  通讯组件概述 该类通讯组件适用于基于PC高级语言的工业自动化控制系统,用于PC与可编程控制器(PLC).智能仪表等进行数据通讯.组件采用动态链接库文件(*.DLL)的形式,在PC系统的项目工 ...

  8. C#中Invoke的用法1

    invoke和begininvoke 区别 一直对invoke和begininvoke的使用和概念比较混乱,这两天看了些资料,对这两个的用法和原理有了些新的认识和理解.  首先说下,invoke和be ...

  9. pid 控制算法

    http://blog.csdn.net/huangkangying/article/details/78129148 https://zh.wikipedia.org/wiki/PID%E6%8E% ...

  10. Android——SeekBar(拖动条)相关知识总结贴

    Android进度条(ProgressBar)拖动条(SeekBar)星级滑块(RatingBar)的例子 http://www.apkbus.com/android-51326-1-1.html A ...