1. 简介

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

2. 特性

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

(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. 优点

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

5. 缺点

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

6. 安装

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

brew install mongodb/sudo brew install mongodb

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

7. 配置

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

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

我的web: https://lewiscutey.github.io

我的公众号:天道酬勤Lewis

Mac新手从入门到放弃MongoDB的更多相关文章

  1. win10搭建代理服务器实现绕过校园网的共享限制--从入门到放弃

    博主所在学校特别坑爹,校园网被电信一家垄断了,而且最恶心的还是电信要求一条网线只能供一台电脑上网,不许接路由器共享网络= =- (还有电信2M价格是380+每年,20m是500每年,而且网速都很慢= ...

  2. iOS 非ARC基本内存管理系列 -手把手教你ARC——iOS/Mac开发ARC入门和使用(转)

    手把手教你ARC——iOS/Mac开发ARC入门和使用 Revolution of Objective-c 本文部分实例取自iOS 5 Toturail一书中关于ARC的教程和公开内容,仅用于技术交流 ...

  3. 30分钟Git命令“从入门到放弃”

    git 现在的火爆程度非同一般,它被广泛地用在大型开源项目中,但是初学者非常容易“从入门到放弃”,各种命令各种参数,天哪,宝宝要吓哭了.实际上新手并不需要了解所有命令的用途,学习是需要一个循序渐进的过 ...

  4. 史上最强Java NIO入门:担心从入门到放弃的,请读这篇!

    本文原题“<NIO 入门>,作者为“Gregory M. Travis”,他是<JDK 1.4 Tutorial>等书籍的作者. 1.引言 Java NIO是Java 1.4版 ...

  5. Linux从入门到放弃、零基础入门Linux(第四篇):在虚拟机vmware中安装centos7.7

    如果是新手,建议安装带图形化界面的centos,这里以安装centos7.7的64位为例 一.下载系统镜像 镜像文件下载链接https://wiki.centos.org/Download 阿里云官网 ...

  6. Linux从入门到放弃、零基础入门Linux(第三篇):在虚拟机vmware中安装linux(二)超详细手把手教你安装centos6分步图解

    一.继续在vmware中安装centos6.9 本次安装是进行最小化安装,即没有图形化界面的安装,如果是新手,建议安装带图形化界面的centos, 具体参考Linux从入门到放弃.零基础入门Linux ...

  7. Scrapy入门到放弃04:下载器中间件,让爬虫更完美

    前言 MiddleWare,顾名思义,中间件.主要处理请求(例如添加代理IP.添加请求头等)和处理响应 本篇文章主要讲述下载器中间件的概念,以及如何使用中间件和自定义中间件. MiddleWare分类 ...

  8. MySQL数据库从入门到放弃(目录)

    目录 MySQL数据库从入门到放弃 推荐阅读 MySQL数据库从入门到放弃 193 数据库基础 194 初识MySQL 195 Windows安装MySQL 196 Linux安装MySQL 197 ...

  9. CYQ.Data 从入门到放弃ORM系列:开篇:自动化框架编程思维

    前言: 随着CYQ.Data 开始回归免费使用之后,发现用户的情绪越来越激动,为了保持这持续的激动性,让我有了开源的念头. 同时,由于框架经过这5-6年来的不断演进,以前发的早期教程已经太落后了,包括 ...

随机推荐

  1. 基于Accord.Audio和百度语言识别

    ---恢复内容开始--- 目标需求 使用录音形式,模拟微信语音聊天.按住录音,松开发送语音,并完成语音识别. ps:百度的语言识别有60秒长度限制,需要自己做好控制. 实现方案 采用C# winfor ...

  2. POJ 2506 Tiling

    Tiling Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7437   Accepted: 3635 Descriptio ...

  3. Linux批量杀死包括某个keyword的进程

    ps -ef|grep ./amplxe-gui|grep -v grep|cut -c 9-15|xargs kill -9 批量杀死包括keyword"./amplxe-gui" ...

  4. SharePoint Patterns and Practices 简介

    作者:陈希章 发表于 2017年12月22日 SharePoint Patterns and Practices,以下简称PnP,是由微软的SharePoint产品组发起并主持的一个有关SharePo ...

  5. Android中build target,minSdkVersion,targetSdkVersion,maxSdkVersion概念区分

    问题引入:   有一个下载功能,在Android 5.x设备上运行正常,Android 6.x上运行异常,现象是下载进度卡在0%.   问题排查发现,是sdk的target设置为23导致,修改为21则 ...

  6. python+appium+unittest自动化测试框架环境搭建

    一.基础软件准备 1.python 版本最新版本,python的IDE使用pycharm.具体的下载链接: python https://www.python.org/ pycharm:https:/ ...

  7. TCP/IP、HTTP、HTTPS、HTTP2.0

    TCP/IP.HTTP.HTTPS.HTTP2.0 HTTP,全称超文本传输协议(HTTP,HyperText Transfer Protocol),是一个客户端和服务器端请求和应答的标准(TCP), ...

  8. python中对象、类型和元类之间的关系

    在python中对象.类型和元类构成了一个微妙的世界. 他们有在这个世界里和平共处,相辅相成.它们遵循着几条亘古不变的定律: 1.python中无处不对象 2.所有对象都有三种特性:id.类型.值 3 ...

  9. intellij idea svn使用一 导入、更新、提交、解决冲突

    大体上是转载,针对版本14有一些特殊的添加. 查看svn的资源库: 下面的多出了一个svn的窗口,在左边有加号可以添加一个svn的库 输入svn的地址,我用的是本地的测试,所以地址为svn://127 ...

  10. ligerUI---ligerGrid分页排序的使用(从后台获取数据显示)

    写在前面: 最近项目的前框框架用的是ligerUI,里面用到了ligerGrid表格,下面就来说说从后台获取数据并在前台页面进行完美展示.啊哈哈哈..(天啦,坐我旁边的丽姐貌似炒股 一个月可以搞几十万 ...