首页 > 数据库技术 > 详细

秒变MonGoDB大神

时间:2020-01-02 16:31:40      阅读:65      评论:0      收藏:0      [点我收藏+]

MongoDB大神学习之路

一.  什么是MongoDB

MongoDB是由C++语言编写的,是一个基于分布式存储的数据库。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。MongoDB最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

所谓关系型数据库:就是指由二维表及其之间的联系组成的一个数据组织。

所谓分布式存储:是将数据分散存储在多台独立的设备上。

MongoDB 更类似 Mysql,支持字段索引、游标操作,其优势在于查询功能比较强大,擅长查询 JSON 数据,能存储海量数据,但是不支持事务。

Mysql 在大数据量时效率显著下降,MongoDB 更多时候作为关系数据库的一种替代。

二.  MongoDB支持的数据类型 

  1. 字符串 String - 这是用于存储数据的最常用的数据类型。MongoDB 中的字符串必须为UTF-8。
  2. 整型 Integer- 此类型用于存储数值。 整数可以是 32 位或 64 位,具体取决于服务器。
  3. 布尔类型 Boolean - 此类型用于存储布尔值(true / false)值。
  4. 双精度浮点数 Double - 此类型用于存储浮点值。
  5. 最小/最大键 Min/ Max keys - 此类型用于将值与最小和最大 BSON 元素进行比较。
  6. 数组 Arrays - 此类型用于将数组或列表或多个值存储到一个键中。
  7. 时间戳 Timestamp - 当文档被修改或添加时,可以方便地进行录制。
  8. 对象 Object - 此数据类型用于嵌入式文档。
  9. Null - 此类型用于存储 Null 值。
  10. 符号 Symbol - 该数据类型与字符串相同; 但是,通常保留用于使用特定符号类型的语言。
  11. 日期 Date- 此数据类型用于以 UNIX 时间格式存储当前日期或时间。您可以通过创建日期对象并将日,月,年的日期进行指定自己需要的日期时间。
  12. 对象 ID Object ID - 此数据类型用于存储文档的 ID。
  13. 二进制数据 Binary data - 此数据类型用于存储二进制数据。
  14. 代码 Code - 此数据类型用于将 JavaScript 代码存储到文档中。
  15. 正则表达式 Regular expression - 此数据类型用于存储正则表达式。
  16. 内存管理机制

三.  MongoDBRedis的区别

Redis 数据全部存在内存,定期写入磁盘,当内存不够时,可以选择指定的 LRU 算法删除数据。

MongoDB 数据存在内存,由 linux 系统 mmap 实现,当内存不够时,只将热点数据放入内存,其他数据存在磁盘。

  1. 支持的数据结构

Redis 支持的数据结构丰富,包括 String、hash、list、set、sorted set 等。

MongoDB 数据结构比较单一,但是支持丰富的数据表达,索引,最类似关系型数据库,支持的查询语言非常丰富。

  1. 性能

二者性能都比较高。

  1. 可靠性

二者均支持持久化。

  1. 集群

MongoDB 集群技术比较成熟,Redis 从 3.0 开始支持集群。

  1. 不适用场景

需要使用复杂 sql 的操作

事务性系统

四.  安装 MongoDB

  1. 下载地址:https://www.mongodb.com/download-center/community
  2. 上传至服务器
  3. 解压
  4. 重命名和移动
  5. 配置环境变量
  6. 创建数据,日志文件
  7. mongoDB 启动配置:在bin目录下加配置文件-->MongoDB.conf
  8. 基本配置:quiet--> # 安静输出;port arg --># 指定服务端口号,默认端口;27017;bind_ip arg--># 绑定服务 IP,若绑定 127.0.0.1,则只能本机访

问,不指定默认本地所有 IP;logpath arg--># 指定 MongoDB 日志文件,注意是指定文件不是目录;logappend --># 使用追加的方式写日志;

pidfilepath arg--># PID File 的完整路径,如果没有设置,则没有 PID

文件;--keyFile arg--># 集群的私钥的完整路径,只对于 Replica Set 架构

有效;unixSocketPrefix arg --># UNIX 域套接字替代目录,(默认为 /tmp);

fork--># 以守护进程的方式运行 MongoDB,创建服务器进程;auth --># 启用验证;cpu --># 定期显示 CPU 的 CPU 利用率和 iowait;dbpath arg--> # 指定数据库路径;diaglog arg--># diaglog 选项 0=off 1=W 2=R 3=both 7=W+some reads;directoryperdb--> # 设置每个数据库将被保存在一个单独的目录;journal--># 启用日志选项,MongoDB 的数据操作将会写入到journal 文件夹的文件里;journalOptions arg --># 启用日志诊断选项;ipv6 --># 启用 IPv6 选项;jsonp --># 允许 JSONP 形式通过 HTTP 访问(有安全影响);maxConns arg--> # 最大同时连接数 默认 2000;noauth --># 不启用验证;nohttpinterface--># 关闭 http 接口,默认关闭 27018 端口访问;noprealloc --># 禁用数据文件预分配(往往影响性能);noscripting --># 禁用脚本引擎;notablescan --># 不允许表扫描;nounixsocket--> # 禁用 Unix 套接字监听;nssize arg (=16)--> # 设置信数据库.ns 文件大小(MB);objcheck--> # 在收到客户数据,检查的有效性;profile arg--> # 档案参数 0=off 1=slow, 2=all;quota --># 限制每个数据库的文件数,设置默认为 8;quotaFiles arg--> # number of files allower per db, requires --quota;rest--> # 开启简单的 rest ;API--repair--> # 修复所有数据库 run repair on all dbs;repairpath arg--> # 修复库生成的文件的目录,默认为目录名称 dbpath;slowms arg (=100)--> # value of slow for profile and console log;smallfiles--> # 使用较小的默认文件;syncdelay arg (=60) --># 数据写入磁盘的时间秒数(0=never,不推荐);sysinfo--> # 打印一些诊断系统信息;upgrade --># 如果需要升级数.

  1. 启动配置文件

进入bin目录中 ./mongod -f mongodb.conf进行启动

  1. 连接 mongodb 数据库

进入bin目录中 ./mongo 进行连接

  1. 设置权限:chmod 754 filename 命令意思是将 filename 文件的读写运行权限赋予文件所有者,把读和运行的权限赋予群组用户,把读的权限赋予其他用户.
  2. 下载安装Robomongo:https://robomongo.org/download
  3. 连接数据库并进行测试
    1. 数据库用户角色:read、readWrite;
    2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
    3. 集群管理角色:clusterAdmin、clusterManage、clusterMonitor、hostManager;
    4. 备份恢复角色:backup、restore;
    5. readAnyDatabase 、 readWriteAnyDatabase 、userAdminAnyDatabase、dbAdminAnyDatabase
    6. 超级用户角色:root
    7. 内部角色:__syst

五.  安装可视化操作工具

六.  MongoDB内置角色说明

七.  操作数据库

  1. 创建数据库:一个 mongodb 中可以建立多个数据库。MongoDB 的默认数据库为"db",该数据库存储在 data 目录中。MongoDB 创建数据库的语法格式如下:

use DATABASE_NAME

> use shsxt

switched to db shsxt

> db

Shsxt

注:如果数据库不存在,则创建数据库,否则切换到指定数据库中,空的数据库是不显示的.

  1. 查询数据库:执行 "db" 命令可以显示当前数据库对象或集合,若想想查看所有数据库,可以使用show dbs 命令.
  2. 删除数据库:MongoDB 删除数据库的语法格式如下:默认删除当前数据库,你可以使用 db 命令查看当前数据库名。

db.dropDatabase()

> db

shsxt

> db.dropDatabase()

{ "dropped" : "shsxt", "ok" : 1 }

> show dbs

admin 0.000GB

config 0.000GB

local 0.000GB

八. 操作集合

  1. 创建集合:db.createCollection(name, {capped: <Boolean>, autoIndexId: <Boolean>, size: <number>, max <number>})

name 是要创建的集合的名称;

options 是一个文件,用于指定配置的集合。

name: 是要创建的集合的名称capped: 是否启用集合限制,如果开启需要制定一个限制条件,默认为不启用,这个参数没有实际意义.

size: 限制集合使用空间的大小,默认为没有限制max: 集合中最大条数限制,默认为没有限制.

autoIndexId: 是否使用_id 作为索引,默认为使用(true 或 false)size 的优先级比 max 要高.

  1. 删除集合:db.COLLECTION_NAME.drop()

> db.shsxt.drop()

true

> show collections

>

九.  操作文档

  1. 插入文档:

1.1. insert()

user0 = {

 "name":"zhangsan",

 "age":18,

 "hobbies":["music", "read"],

 "addr":{

 "country":"China",

 "city":"BJ"

 }

}

db.user.insert(user0)

注:_id 字段,这个值必须在 user 集合中唯一,若不指定主键值,会自动分配一个值。

1.2. save()

user1 = {

 "_id":"2",

 "name":"lisi",

 "age":20,

 "hobbies":["music", "read"],

 "addr":{

 "country":"China",

 "city":"BJ"

 }

}

db.user.save(user1)

1.3. 批量插入时,只需要修改最后一个命令即可:db.user.insertMany([user1, user2, user3, user4, user5])

2. 更新文档

MongoDB 使用 update() 和 save() 方法来更新集合中的文档,我们详细来看下update 的应用,上一节已经介绍过 save()方法。update() 方法用于更新已存在的文档。

语法格式如下:db.collection.update(criteria, objNew, upsert,  multi)

参数说明:

· criteria : update 的查询条件,类似 sql update 查询内 where 后面的。

· objNew : update 的对象和一些更新的操作符(如$,$inc...)等,也可以理解为 sql update 查询内 set 后面的.

upsert : 这个参数的意思是,如果不存在 update 的记录,是否插入 objNew,true为插入,默认是 false,不插入。

· multi : mongodb 默认是 false,只更新找到的第一条记录,如果这个参数为 true,就把按条件查出来多条记录全部更新。

3.删除文档

MongoDB remove()函数是用来移除集合中的数据,其语法格式如下所示:

db.user.remove(<query>, {justOne: <boolean>})

参数说明:

query:(可选)删除的文档的条件。

justOne :(可选)如果设为 true,则只删除一个文档,False 删除所有匹配的数据等价于db.user.deleteOne(<query>):删除符合条件的第一个文档.

删除所有数据命令:

db.user.remove({})

等价于

db.user.deleteMany({}) # 等于是清空该集合(表)

4.查询文档

查询所有

MongoDB 查询数据的语法格式如下:

db.user.find() # 等同于 db.user.find({})

# 去重

db.user.distinct(‘name‘)

find() 方法以非结构化的方式来显示所有文档。

如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:

db.user.find().pretty()

pretty() 方法以格式化的方式来显示所有文档

注:在 MongoDB 中,用到方法都得用 $ 符号开头

5.运算

5.1 比较运算

=,!= (‘$ne‘) ,> (‘$gt‘) ,< (‘$lt‘) ,>= (‘$gte‘) ,<= (‘$lte’)

5.2 逻辑运算

MongoDB 中字典内用逗号分隔多个条件是 and 关系,或者直接用$and,$or,$not(与或非)

5.3 成员运算

成员运算无非 in 和 not in,MongoDB 中形式为$in , $nin

5.4 $type 操作符

5.5 正则定义在/ /内

5.6 投影:MongoDB 投影意思是只选择必要的数据而不是选择一整个文件的数据。 在 MongoDB 中,当执行 find()方法,那么它会显示一个文档所有字段。要限制这一点,需要设置的字段列表值 1 或 0。1 用来显示字段而 0 是用来隐藏字段,_id 会默认显示出来.

5.7 数组

5.8 排序:在 MongoDB 中使用使用 sort()方法对数据进行排序,sort()方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而-1 是用于降序排序.

5.9 分页:limit 表示取多少个 document,skip 代表跳过几个 document分页公式:db.user.find().skip((pageNum–1)*pageSize).limit(pageSize);

db.user.find().limit(2).skip(0) # 前两个

db.user.find().limit(2).skip(2) # 第三个和第四个

db.user.find().limit(2).skip(4) # 第五个和第六个

5.10 统计:# 查询_id 大于 3 的人数

# 方式一db.user.count({‘_id‘:{"$gt":3}})

# 方式二db.user.find({_id:{"$gt":3}}).count()

6.聚合:我们在查询时肯定会用到聚合,在 MongoDB 中聚合为 aggregate,聚合函数主要用到$match $group $avg $project $concat,可以加"$match"也可以不加$match

秒变MonGoDB大神

原文:https://www.cnblogs.com/ruanjianwei/p/12133339.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!