经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 数据库/运维 » MongoDB » 查看文章
MongoDB怎么用?
来源:cnblogs  作者:王剑威  时间:2018/12/25 9:23:03  对本文有异议

MongoDB简介

MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。

MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

MongoDB属于NoSQL

在高负载的情况下,添加更多的节点,可以保证服务器性能。

MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。

MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

类似于json的数据形式

 

MongoDB的主要特点

  • MongoDB 是一个面向文档存储的数据库,操作起来比较简单和容易。
  • 你可以在MongoDB记录中设置任何属性的索引 (如:FirstName="Sameer",Address="8 Gandhi Road")来实现更快的排序。
  • 你可以通过本地或者网络创建数据镜像,这使得MongoDB有更强的扩展性。
  • 如果负载的增加(需要更多的存储空间和更强的处理能力) ,它可以分布在计算机网络中的其他节点上这就是所谓的分片。
  • Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
  • MongoDb 使用update()命令可以实现替换完成的文档(数据)或者一些指定的数据字段 。
  • Mongodb中的Map/reduce主要是用来对数据进行批量处理和聚合操作。
  • Map和Reduce。Map函数调用emit(key,value)遍历集合中所有的记录,将key与value传给Reduce函数进行处理。
  • Map函数和Reduce函数是使用Javascript编写的,并可以通过db.runCommand或mapreduce命令来执行MapReduce操作。
  • GridFS是MongoDB中的一个内置功能,可以用于存放大量小文件。
  • MongoDB允许在服务端执行脚本,可以用Javascript编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可。
  • MongoDB支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。
  • MongoDB安装简单。

 

NoSQL简介

NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL"。

在现代的计算系统上每天网络上都会产生庞大的数据量。

这些数据有很大一部分是由关系数据库管理系统(RDBMS)来处理。 1970年 E.F.Codd's提出的关系模型的论文 "A relational model of data for large shared data banks",这使得数据建模和应用程序编程更加简单。

通过应用实践证明,关系模型是非常适合于客户服务器编程,远远超出预期的利益,今天它是结构化数据存储在网络和商务应用的主导技术。

NoSQL 是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。NoSQL的拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。

NoSQL,指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写,是对不同于传统的关系型数据库的数据库管理系统的统称。

NoSQL用于超大规模数据的存储。(例如谷歌或Facebook每天为他们的用户收集万亿比特的数据)。这些类型的数据存储不需要固定的模式,无需多余操作就可以横向扩展。

 

下载安装MongoDB

官网链接    https://www.mongodb.com/download-center?jmp=nav

 

 启动MongoDB

启动之前要先添加环境变量

MongoDB服务端启动的命令为mongod

配置数据存放的位置, 服务就可以正常的启动

我将配置放在专门的配置文件中

  1. dbpath=E:\mongodb_data\data

启动时指定配置文件

  1. mongod config c:\mongodb\conf\master.cfg

 

MongoDB支持的数据类型

  1. Object ID: 对象id
  2. "_id" : ObjectId("5b151f8536409809ab2e6b26")
  3. #"5b151f85" 代指的是时间戳,这条数据的产生时间
  4. #"364098" 代指某台机器的机器码,存储这条数据时的机器编号
  5. #"09ab" 代指进程ID,多进程存储数据的时候,非常有用的
  6. #"2e6b26" 代指计数器,这里要注意的是,计数器的数字可能会出现重复,不是唯一的
  7. #以上四种标识符拼凑成世界上唯一的ObjectID
  8. #只要是支持MongoDB的语言,都会有一个或多个方法,对ObjectID进行转换
  9. #可以得到以上四种信息
  10.  
  11. #注意:这个类型是不可以被JSON序列化的
  12. String 字符串,必须是utf-8
  13. db.table01.insertOne({"name": "sath"})
  14. Boolean:布尔值,true 或者 false (这里有坑哦~在我们Python True False 首字母大写)
  15. db.teble01.insertOne({"status": true})
  16. Integer:整数 (Int32 Int64 你们就知道有个Int就行了 ,一般我们用Int32)
  17. db.table01.insert({"age":parseInt("100")}) # 字符串会被转成int32
  18. Double:浮点数 (没有float类型,所有小数都是Double)
  19. 默认是添加的所有的数数字都是Double
  20. Arrays:数组或者列表,多个值存储到一个键 (list哦,大Python中的List哦)
  21. db.table01.insert({"hobby":["python","go", "java"]})
  22. Object:如果你学过Python的话,那么这个概念特别好理解,就是Python中的字典,这个数据类型就是字典
  23. db.table01.insert({"1": {"name":"sath", "age":35}})
  24. Null:空数据类型 , 一个特殊的概念,None Null
  25. db.table01.insert({"is_null": null})
  26. Timestamp:时间戳
  27. db.table01.insert({"t_time":new Date().valueOf()})
  28. Date:存储当前日期或时间unix时间格式 (我们一般不用这个Date类型,时间戳可以秒杀一切时间类型)
  29. db.table01.insert({"t_time":Date()})
  30. Mon Dec 24 2018 19:23:34 GMT+0800
  31. db.table01.insert({"t_time":new Date()})
  32. 2018/12/24 下午19:23:19

 

MongoDB常用语法

  1. 1. db.table01.insert({"name":"wangjianwei", "age":22}) # 官方不推荐
  2. # 官方推荐以下两种方式
  3. 2. 插入一条数据
  4. db.insertOne({"name":"zhangsan", "age":78}) # 会返回添加进去的对象
  5. {
  6. "acknowledged" : true,
  7. "insertedId" : ObjectId("5c2091e508d12e25ff01af8d")
  8. }
  9. 3. 插入多条数据
  10. db.table01.insertMany([{"name":"zhangsan", "age":78},{"name":"lisi", "age":36}])
  11. {
  12. "acknowledged" : true,
  13. "insertedIds" : [
  14. ObjectId("5c20924e08d12e25ff01af8e"),
  15. ObjectId("5c20924e08d12e25ff01af8f")
  16. ]
  17. }

 

  1. 1. 删除所有
  2. db.table01.remove({})
  3. 官方推荐写法
  4. 2. 删除一个
  5. db.table01.deleteOne({"hobby":{$all:["抽烟"]}})
  6. 3.删除所有匹配到的
  7. db.table01.deleteMany({"hobby":{$all:["抽烟"]}})
  8. 4. 删除表
  9. db.table01.drop()

 

  1. 语法格式:
  2. db.collection.update(
  3. <query>,
  4. <update>,
  5. {
  6. upsert: <boolean>,
  7. multi: <boolean>,
  8. writeConcern: <document>
  9. }
  10. )
  11. query : update的查询条件
  12. update : 要更新的内容
  13. upsert : 可选,这个参数的意思是,如果不存在当前更新的记录,是否插入你要更新的值到数据中,默认是false,不插入。
  14. multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
  15. writeConcern :可选,抛出异常的级别。
  16. 官方推荐的写法
  17. 更新第一条数据
  18. db.table01.updateOne({"age":{$gt:70}}, {$set:{"age":0}})
  19. 更新所有的数据
  20. db.table01.updateMany({"age":{$gt:70}}, {$set:{"age":0}})

 

  1. 1. 查询所有
  2. db.table01.find()
  3. 2. db.table01.find().pretty() # 当查询到的结果可读性更高
  4. 3. 根据条件查询
  5. db.table01.find({"age":78}) # find后面可以跟条件
  6.  
  7. 4. 多个条件之间使用and的关系
  8. db.table01.find({"age":78, "name": "wangwu"}) # 多个条件之间是and的关系
  9.  
  10. 5. 多个条件之间使用or关系
  11. db.table01.find({$or:[{"age":78},{"name":"zhangsan"}]}
  12. 多个条件放在列表中, 每一个条件是一个字典
  13. 6. andor一块使用
  14. db.table01.find({"addr":"ShangHai",$or:[{"name":"sath"},{"age": 88}]})
  15. 7. in条件查询
  16. db.table01.find({"name": {$in: ["zhangsan", "sath"]}})
  17. name的值在某个列表中
  18. 8. 比较大小的方法
  19. 8.1 大于
  20. db.table01.find({"age": {$gt: 60}})
  21. 8.2 大于等于
  22. db.table01.find({"age": {$gte: 53}})
  23. 8.3 小于
  24. db.table01.find({"age": {$lt: 53}})
  25. 8.4 小于等于
  26. db.table01.find({"age": {$lte: 36}})
  27. 8.5 不等于
  28. db.table01.find({"age": {$ne: 53}})
  29. 8.6 等于
  30. db.table01.find({"age": {$eq: 53}})
  31. db.table01.find({"age":53})
  32. 8.7
  33.  
  34. 9.
  35. db.table01.find({"hobby":{$all:["喝酒", "烫头"]}})
  36. # all: 包含列表中所有的条件的

10.模糊匹配
db.col.find({title:/教/}) # 模糊匹配
db.col.find({title:/^教/}) # 匹配开头
db.col.find({title:/教$/}) # 匹配末尾

  1.  

 

备份与恢复

备份

  1. 保证数据库正在运行
  2. mongodump -h 127.0.0.1 -o E:\db # 备份所有的数据库
  3. mongodump --collection table01 --db day120 -o E:\db2 # 备份指定数据库中的的指定集合(表)

 

常用参数

  1. -h
  2. MongDB所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017
  3.  
  4. -d
  5. 需要备份的数据库实例,例如:test
  6. -o
  7. 备份的数据存放位置,例如:c:\data\dump,当然该目录需要提前建立,在备份完成后,系统自动在dump目录下建立一个test目录,这个目录里面存放该数据库实例的备份数据。

 

恢复

  1. mongorestore -h 127.0.0.1 E:\db

 

常用参数

  1. --host <:port>, -h <:port>
  2. MongoDB所在服务器地址,默认为: localhost:27017
  3.  
  4. --db , -d
  5. 需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2
  6. --drop
  7. 恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用哦!
  8. <path>
  9. mongorestore 最后的一个参数,设置备份数据所在位置,例如:c:\data\dump\test
  10. 你不能同时指定 <path> --dir 选项,--dir也可以设置备份目录。
  11. --dir
  12. 指定备份的目录
  13. 你不能同时指定 <path> --dir 选项。

 

 

 

参考:  http://www.runoob.com/mongodb/mongodb-intro.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号