Mac新手从入门到放弃MongoDB

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

时间: 2024-10-10 17:10:38

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

初识mac,写给mac新手的入门指南(四)Mac小白装机必备

花了好几天的时间翻了各种帖子,发现大多都是各种高大上,不太适合新手,所以打算自己写篇,尽量详细一点,希望对大家有用.此次推荐都是适合mac新手,适合大多数人平时会使用的apps,欢迎补充! https://www.macdown.com 此次推荐的有以下app: 网易云音乐 小编也是网易云忠实粉,多少个辗转反侧又无眠的夜都是和网易云音乐的各类评论一起度过,人家都说在网易云听歌,听的是故事!! IINA(视频播放器) 这款app应用商店没有,但是看很多人推荐所以小编也下下来用了,是免费哒.目看来还

IDEA如何快速搭建Java开发环境,IntelliJ IDEA mac新手入门

作为IntelliJ IDEA mac新手,IDEA如何快速搭建Java开发环境呢?今天小编就给大家带来了IntelliJ IDEA mac使用教程,想知道IDEA如何快速搭建Java开发环境? 全局JDK(默认配置) 具体步骤:顶部工具栏 File ->Other Settins -> Default Project Structure -> SDKs -> JDK 示例: 根据下图步骤设置JDK目录,最后点击OK保存. 注:SDKs全称是Software Development

NDK开发 从入门到放弃(七:Android Studio 2.2 CMAKE 高效NDK开发)

前言 之前,每次需要边写C++代码的时候,我的内心都是拒绝的. 1. 它没有代码提示!!!这意味着我们必须自己手动敲出所有的代码,对于一个新手来说,要一个字母都不错且大小写也要正确,甚至要记得住所有的jni函数等,真是太折磨人了-平时写java代码的时候都是写几个字母会出来一大堆提示然后选择的,这样还有一个好处就是很多时候我们不知道有那些函数,但是我们可以通过obj.,然后就可以看到它有哪些方法函数了. 2. 很多地方会显示为红色,就像是错误提示的那种,当然,如果没错的话还是能编译运行的,但是如

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

git 现在的火爆程度非同一般,它被广泛地用在大型开源项目中,但是初学者非常容易"从入门到放弃",各种命令各种参数,天哪,宝宝要吓哭了.实际上新手并不需要了解所有命令的用途,学习是需要一个循序渐进的过程,你可以从强大的命令开始.这个是给新手或熟悉图形工具的老鸟们看的教程,"从入门到放弃" 一.基本了解 git命令是一些命令行工具的集合,它可以用来跟踪,记录文件的变动.比如你可以进行保存,比对,分析,合并等等.这个过程被称之为版本控制.已经有一系列的版本控制系统,比如

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

如果是新手,建议安装带图形化界面的centos,这里以安装centos7.7的64位为例 一.下载系统镜像 镜像文件下载链接https://wiki.centos.org/Download 阿里云官网:https://mirrors.aliyun.com 现更新为:https://opsx.alibaba.com/mirror 清华软件镜像:https://mirrors.tuna.tsinghua.edu.cn/ 都可以, 下载centos7.7的64位版本镜像文件种子,然后用下载软件下载即可

从入门到放弃,.net构建博客系统(二):依赖注入

文章目录:<从入门到放弃,.net构建博客系统> 从入门到放弃,.net构建博客系统(一):系统构建 从入门到放弃,.net构建博客系统(二):依赖注入 上一篇中有讲到项目启动时会进行ioc的依赖注入,但具体是怎么注入的呢?我们先一步步往下走 一.注册autofac配置 首先bootstraper会进行初始化,接着将当前mvc控制器工厂改为AutofacControllerFactory. 1 public class AutofacConfig 2 { 3 /// <summary&g

《Java从入门到放弃》文章目录

转眼半个月过去了,不知不觉也写了10篇博客,突然发现所有的目录都没有纯列表的展示,所以特意写一个目录篇,来记录该系列下所有的文章. 当然,因为现在还没有写完,所以先按时间顺序排列,等相关内容都写完后,再按学习顺序来整理. <Java从入门到放弃>入门篇:XMLHttpRequest的基本用法 <Java从入门到放弃>入门篇:Struts2的基本访问方 <Java从入门到放弃>入门篇:Struts2的基本访问方式(二) <Java从入门到放弃>入门篇:Stru

iOS 即时通讯,从入门到 “放弃”?

原文链接:http://www.jianshu.com/p/2dbb360886a8 本文会用实例的方式,将 iOS 各种 IM 的方案都简单的实现一遍.并且提供一些选型.实现细节以及优化的建议. —— 由宇朋Look分享 前言 本文会用实例的方式,将iOS各种IM的方案都简单的实现一遍.并且提供一些选型.实现细节以及优化的建议. 注:文中的所有的代码示例,在github中都有demo:iOS即时通讯,从入门到“放弃”?(demo)可以打开项目先预览效果,对照着进行阅读. 言归正传,首先我们来总

软件公司为何要放弃MongoDB?

本文转至:http://database.51cto.com/art/201503/469510_all.htm(只作转载, 不代表本站和博主同意文中观点或证实文中信息) Olery成立于2010年,总部位于阿姆斯特丹.该初创公司为酒店行业提供声誉管理与媒体监控工具,帮助酒店将网络评论和社交媒体反馈转化成可执行的商业智能分析. Olery成立最初是使用MySQL来存储(用户.合同等等)核心数据,用MongoDB来存储评论及其类似的数据(即哪些在数据丢失的情况下很容易恢复的数据).一开始,这样的安