一,MongoDB简介
- MongoDB 是一个基于分布式****,****文件存储的NoSQL数据库。
- 由C++语言编写,运行稳定,性能高,旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
- MongoDB是为快速开发互联网web应用而设计的数据库系统。
- MongoDB的设计目标是极简单、灵活、作为Web应用栈的一部分。
- MongoDB的数据模型是面向文档的,所谓文档是一种类似JSON的结构,简单理解MongoDB这个数据库中存在的是各种各样的Json.
- MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
二,MongoDB特点:
模式自由 :可以把不同结构的文档存储在同一个数据库里
面向集合的存储:适合存储 JSON风格文件的形式
完整的索引支持:对任何属性可索引
复制和高可用性:支持服务器之间的数据复制,支持主-从模式及服务器之间的相互复制。复制的主要目的是提供冗余及自动故障转移
自动分片:支持云级别的伸缩性:自动分片功能支持水平的数据库集群,可动态添加额外的机器
丰富的查询:支持丰富的查询表达方式,查询指令使用JSON形式的标记,可轻易查询文档中的内嵌的对象及数组
快速就地更新:查询优化器会分析查询表达式,并生成一个高效的查询计划
高效的传统存储方式:支持二进制数据及大型对象(如照片或图片)
三、环境安装
下载地址:
- 下载mongodb的版本,两点注意
- 根据业界规则,偶数为稳定版,如1.6.X,奇数为开发版,如1.7.X
- 32bit的mongodb最大只能存放2G的数据,系统支持不好,64bit就没有限制。
1.2 解压安装
到官网,选择合适的版本下载解压
tar -zxvf mongodb-linux-x86_64-ubuntu1604-3.4.0.tgz
移动到/usr/local/目录下
sudo mv mongodb-linux-x86_64-ubuntu1604-3.4.0/ /usr/local/mongodb/
将可执行文件添加到PATH路径中
export PATH=/usr/local/mongodb/bin:$PATH
2.mongodb服务端
2.1 启动mongodb服务简写命令
默认会随机分配一个端口号:2275
下次有可能是另外一个数
sudo /usr/local/mongodb/bin/mongod --config /etc/mongodb.conf
2.2 配置文件在/etc/mongod.conf
在mongod.conf
文件配置默认端口27017
打开配置文件命令:sudo subl /etc/mongod.conf
默认端口27017
4.MongoDB GUI可视化工具
Robomongo 0.9.0-RC4
下载地址:https://robomongo.org/
百度云链接:http://pan.baidu.com/s/1c1Vj6nQ 密码:gijn
MongoDB操作命令
- 查询状态命令查询状态:
sudo systemctl status mongodb
- 启动mongodb服务端:
sudo systemctl start mongodb
- 停止mongodb服务端:
sudo systemctl stop mongodb
- 重新启动:
sudo systemctl restart mongodb
- 使用mongo进入客户端命令:
mongo
- 查看当前选择数据库名称
db
- 查看当前数据库信息
db.stats()
- 终端退出连接
exit
或ctrl+c
四、数据库操作
- 查看所有数据库名称,列出所有在物理上存在的数据库
show dbs
- 数据库切换(选择)切换数据库
use test
- 查看当前数据库名称
db
- 创建数据库,创建py3数据库:
use py3
注意:当创建集合后数据库才出现db.createCollection(name, options)
- 删除当前指向的数据库,如果数据库不存在,则什么
db.dropDatabase()
- 在某个数据库里面创建集合
db.createCollection(name, options)
- 不限制集合大小
db.createCollection("stu")
- 查看当前数据库的集合
show collections
- 删除集合db.集合名称.drop()
五,数据基本操作
- 插入
db.集合名称.insert(document)
- example
db.stu.insert({name:'gj',gender:1})
(插入文档时,如果不指定_id参数,MongoDB会为文档分配一个唯一的ObjectId)也可以自己指定id- example
s1={_id:'20160101',name:'hr'}
s1.gender=0
db.stu.insert(s1)
- 简单查询
db.集合名称.find()
或者db.集合名称.find({})
- 方法find():查询
db.集合名称.find({条件文档})
- 方法findOne():查询,只返回第一个文档
db.集合名称.findOne({条件文档})
- 方法pretty():将结果格式化
db.集合名称.find({条件文档}).pretty()
- 更新
db.集合名称.update(<query>,<update>,{upsert: <boolean>,multi:<boolean>})
- 2.把所有name是hr修改成gj:
db.stu.update({name:'hr'},{$set:{name:'gj'}},{multi:true})
- 3.指定属性更新,通过操作符$set,数据结构不会被破坏,也是只修改一条
db.stu.insert({name:'hr',gender:0})
db.stu.update({name:'hr'},{$set:{name:'hys'}})
- 4.默认值更新一条数据,只修改字段,不破坏数据
db.stu.update({},{$set:{name:'mnc'}})
- 5.全文档找更新找到的第一条,把{name:'hr'}对应的这条修改{name:'mnc'},其他字段全部丢掉,如果有两条满足,会找到并且只更新的第一条,数据结构被破坏。
db.stu.update({name:'hr'},{name:'mnc'})
- 6.修改多条匹配到的数据,多条操作一定要配合$set,否则会报错
注意true和flase是小写db.stu.update({},{$set:{gender:0}},{multi:true})
- 语法
db.集合名称.save(document)
- 如果文档的_id已经存在则修改,如果文档的_id不存在则添加
注意,如果_id写成是id,则会把id当成key
- example:
db.stu.save({_id:'20160102','name':'yk',gender:1})
- example:
db.stu.save({_id:'20160102','name':'wyk'})
- 删除
db.集合名称.remove(<query>,{justOne: <boolean>})
- 全部删除
db.stu.remove({})
- 只删除匹配到的第一条
db.stu.remove({gender:0},{justOne:true})