Mac新手从入门到放弃MongoDB

1. 简介javascript

  MongoDB 是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构很是松散,是相似json的bson格式,所以能够存储比较复杂的数据类型。Mongo最大的特色是它支持的查询语言很是强大,其语法有点相似于面向对象的查询语言,几乎能够实现相似关系数据库单表查询的绝大部分功能,并且还支持对数据创建索引。若是你问我mongodb与mysql有啥关系,我说就像JavaScript和Java。

2. 特性
vue

  MongoDB 的设计目标是高性能、可扩展、易部署、易使用,存储数据很是方便。其主要功能特性以下:java

(1)面向集合存储,容易存储对象类型的数据(在MongoDB 中数据被分组存储在集合中,集合相似RDBMS 中的表,一个集合中能够存储无限多的文档)。
(2)模式自由,采用无模式结构存储(在MongoDB 中集合中存储的数据是无模式的文档,采用无模式存储数据是集合区别于RDBMS 中的表的一个重要特征)。
(3)支持彻底索引,能够在任意属性上创建索引,包含内部对象(MongoDB的索引和RDBMS 的索引基本同样,能够在指定属性、内部对象上建立索引以提升查询的速度)。
(4)支持查询(MongoDB 支持丰富的查询操做,MongoDB 几乎支持SQL中的大部分查询)。
(5)强大的聚合工具(MongoDB 除了提供丰富的查询功能外,还提供强大的聚合工具,如count、group 等,支持使用MapReduce 完成复杂的聚合任务)。
(6)支持复制和数据恢复(MongoDB 支持主从复制机制,能够实现数据备份、故障恢复、读扩展等功能)。
(7)使用高效的二进制数据存储,包括大型对象(如视频)。使用二进制格式存储,能够保存任何类型的数据对象。
(8)自动处理分片,以支持云计算层次的扩展(MongoDB 支持集群自动切分数据,对数据进行分片可使集群存储更多的数据,实现更大的负载,也能保证存储的负载均衡)。
(9)支持Perl、PHP、Java、C#、JavaScript、Ruby、C 和C++语言的驱动程序(MongoDB 提供了当前全部主流开发语言的数据库驱动包,开发人员能够轻松变成访问MongoDB 数据库)。
(10)文件存储格式为BSON(JSON 的一种扩展)(BSON 是对二进制格式的JSON 的简称,BSON 支持文档和数组的嵌套)。
(11)能够经过网络访问(能够经过网络远程访问MongoDB 数据库)。
3. 核心
  在mongodb中基本核心的概念是文档、集合、数据库,具体见下表:

4. 优势node

  • - 高可扩展性
  • - 分布式计算
  • - 低成本
  • - 架构灵活,半结构化数据
  • - 关系简洁,操做简单有效 

5. 缺点mysql

  • - 没有标准化
  • - 有限的查询功能(到目前为止)
  • - 安全性有限

6. 安装webpack

  使用brew安装,此外也可使用 curl 命令来下载安装:git

brew install mongodb/sudo brew install mongodb

   若是出现上图所示内容即表示安装成功,Mac新手使用brew的时候必定要多注意执行命令以后的一些信息,上图就提示了mongodb 的安装路径为 /usr/local/Cellar/mongodb,若是须要修改mongodb的配置信息能够执行命令 mongod --config /usr/local/etc/mongod.conf;es6

7. 配置github

  安装成功以后不要着急启动,若是以前已经成功使用过,那就能够忽略配置这一项了,配置的话首先要知道数据库存储的默认目录为根目录下的data/db;web

mkdir -p /data/db           // 须要建立一个目录,为mongodb默认的数据写入目录
chown `id -u` /data/db      // 给刚刚建立的目录以可读可写的权限 
mongo --dbpath dir_name     // 也能够修改目录,dir_name 为你的目录名字

8. 启动

  配置好以上信息以后就能够启动了,其实用brew管理这些软件特别方便,全部的命令也几乎相同;

brew services start mongodb/mongod

  若是出现上图所示“Successfully started 'mongodb'”即表示启动成功;

9. 链接

  成功启动以后执行mongo命令链接数据库,可能会出现下图:

   若是成功出现上图所示内容,而且出现箭头表示数据库链接成功,若是没有链接成功的话多是因为你以前使用并不是正常关闭致使生产了mongod.lock文件,意思是把数据库暂时性锁住了,能够找到该文件直接删除并从新启动,若是仍是不行的话可使用命令ps -aef | grep mongo查看占有的进程,经过命令kill - 9 id(进程号)杀死这个再也不使用的进程,尝试从新启动便可;

10. 建立数据库(增)

  MongoDB 有建立新的数据库的语法格式以下:(默认的数据库为 test,若是你没有建立新的数据库,集合将存放在 test 数据库中)

show databases               //  show  查看有哪些数据库,也可show dbs
use demo                     //  use  建立数据库(若是数据库不存在,则建立数据库,不然切换到指定数据库)
show collections             //  查看有哪些集合(collections至关于SQL中的一个个表)
db.createCollection('movie')        //  建立集合(至关于建立表)

11. 删除数据库(删)

  MongoDB 删除数据库的语法格式以下:(删除当前数据库,默认为 test,你可使用 db 命令查看当前数据库名,这个命令必定要学会,删库跑路必备)

db.dropDatabase()        //  删除当前数据库,能够用use进行选择数据库来删除
db.collection.drop()     //  删除当前数据库中的集合collection 

12. 插入数据库(插)

  MongoDB 使用 insert() 或 save() 方法向集合中插入数据,语法以下:

db.collection.insert(document)  //  给集合collection中插入数据,若是该集合不在该数据库中, MongoDB 会自动建立该集合并插入文档
db.collection.save(document)    //  若是不指定 _id 字段 save() 方法相似于 insert() 方法。若是指定 _id 字段,则会更新该 _id 的数据

  insert插数据时有几点须要注意一下:

  • 1. 不一样key-value须要用逗号隔开,而key:value中间是用冒号,按照标准的json格式来写;
  • 2. 若是一个key有多个value,value要用[]。哪怕当前只有一个value,也尽可能加上[]以备后续的添加;
  • 3. 整个“数据块”要用{}括起来;
  • 4. 若是不指定ID的话,数据库默认会自动建立一个ID号,在同一个数据库里,每一个文档的ID号是不一样的;

13. 更新数据库(改)

  MongoDB 使用 update() 和 save() 方法来更新集合中的文档,语法以下:

update() 方法用于更新已存在的文档。语法格式以下:

db.collection.update(
   <query>,  //  update的查询条件,相似sql update查询内where后面的
   <update>,  //  update的对象和一些更新的操做符(如$,$inc...)等,也能够理解为sql update查询内set后面的
   {
     upsert: <boolean>,  //  可选,这个参数的意思是,若是不存在update的记录,是否插入objNew,true为插入,默认是false,不插入
     multi: <boolean>,  //  可选,mongodb 默认是false,只更新找到的第一条记录,若是这个参数为true,就把按条件查出来多条记录所有更新
     writeConcern: <document>  //  可选,抛出异常的级别
   }
)

save() 方法经过传入的文档来替换已有文档。语法格式以下:

db.collection.save(
   <document>,  //  文档数据,若是与以前的文档所有value值都有变化则会从新建立,因此必须保留一部分value值相同才会更新;
   {
     writeConcern: <document>  //  可选,抛出异常的级别;
   }
) 

14. 查询数据库(查)

  MongoDB 查询文档使用 find() 方法。find() 方法以非结构化的方式来显示全部文档,能够传入各类不一样的查询条件,查询数据的语法格式以下:

db.collection.find(query, projection) 
query :可选,使用查询操做符指定查询条件;
projection :可选,使用投影操做符指定返回的键。查询时返回文档中全部键值,只需省略该参数便可(默认省略)

db.collection.find().pretty()  //  pretty() 方法以格式化的方式来显示全部文档
db.collection.findOne()  //  只返回一条数据

15. 进阶($type操做符/limit()/skip()/sort()/索引/分片/备份/监控/拓展)

  MongoDB 更高级的一些常见操做语法格式以下:

db.collection.find().pretty()       //  格式化输出
db.collection.find().count()        //  查看集合中文档的个数
db.collection.find().skip()         //  跳过指定数量的数据
db.collection.find().limit()        //  读取指定记录的条数
db.collection.find().sort({key:1})  //  经过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而-1是用于降序排列
db.collection.getIndexes()          //  查看集合索引状况
db.collection.dropIndexes()         //  删除索引(不会删除 _id 索引)
db.collection.createIndex({key:1})  //  建立索引(参数key 为你要建立的索引字段,1为按升序建立索引,-1为按降序建立索引)
db.collection.aggregate($group)     //  聚合主要用于处理数据(如平均值,求和等),并返回计算后的数据结果,相似sql语句中的 count(*)。

$gt	大于
$gte	大于等于
$lt	小于
$lte	小于等于
$ne	不等于

   这些进阶的常见操做,具体使用方法能够查看官方文档http://www.mongodb.org.cn/tutorial,固然你感兴趣的话能够为中文社区作贡献;

16. 总结

  MongoDB 的学习也有几天了,如今终于有时间能够总结记录下来,本文主要是一些mongodb的核心基础部分,比较适用于Mac新手学习,具体的操做代码也贴了出来,能够少走不少弯路,若是你也一步步的跟着步骤学到了这里,应该算是基本入门了吧,至于放弃也是一种美,既然坚持学到了这里,相信你也不会放弃的。其实这只是年前一个大项目的奠定工做,接下来就准备着手开发vue+webpack+es6+nodejs+mongodb的全栈项目了,若是你也想了解学习,欢迎继续关注我!


个人博客http://www.cnblogs.com/lewiscutey

个人webhttps://lewiscutey.github.io

个人公众号:天道酬勤Lewis

相关文章
相关标签/搜索