Mac新手从入门到放弃MongoDB
1. 简介
2. 特性
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