1、MongoDB简介
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
MongoDB的特点:
1、MongoDB 是一个面向文档存储的数据库,操作起来比较简单和容易。
2、你可以在MongoDB记录中设置任何属性的索引来实现更快的排序。
3、MongoDB有很强的扩展性,海量数据处理时可以根据需要进行分片。
4、Mongo支持丰富的查询表达式。
5、Mongodb中的Map/reduce主要是用来对数据进行批量处理和聚合操作。
6、GridFS是MongoDB中的一个内置功能,可以用于存放大量小文件。
7、MongoDB支持多种编程语言。
MongoDB主要使用场景如下:
1)网站实时数据处理。它非常适合实时的插入、更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。
2)缓存。由于性能很高,它适合作为信息基础设施的缓存层。在系统重启之后,由它搭建的持久化缓存层可以避免下层的数据源过载。
3)高伸缩性的场景。非常适合由数十或数百台服务器组成的数据库,它的路线图中已经包含对MapReduce引擎的内置支持。
2、MongoDB的安装
2.1 准备一台centos7机器(关闭防火墙,安装Docker)
安装Docker参考:
在Centos7中安装Docker
2.2 使用Docker方式安装MongoDB
# 安装MongoDB
docker run -d -p 27017:27017 --name mongodb -e MONGO_INITDB_ROOT_USERNAME=admin -e MONGO_INITDB_ROOT_PASSWORD=123456 mongo
# 进入到MongoDB容器中
docker exec -it mongodb /bin/bash
# 登录 admin数据库
mongo 192.168.1.7:27017 -u 'admin' -p '123456' --authenticationDatabase 'admin'
3 MongoDB的简单操作与使用
3.1 创建数据库student
# 创建数据库student
use student
3.2 创建student数据库的用户che,密码是123456(dbOwner: 对当前数据库有全部权限)
#
db.createUser({ user: 'che', pwd: '123456', roles: [ { role: "dbOwner", db:"student" } ] });
常用权限说明:
read: 只能读取指定数据库
readWrite: 能读写指定数据库
dbAdmin: 能执行管理函数,如索引创建、删除,查看统计或访问 system.profile
dbOwner: 对当前数据库有全部权限
userAdmin: 能创建、删除和管理用户
root: 只能在 admin 数据库中可用。超级权限
3.3 登录数据库,创建文档(表)
# 登录数据库
db.auth("che","123456")
# 创建文档(表)test
db.createCollection("test")
# 查看数据库
show dbs;
# 查看数据表
show tables;
# 切换数据库
use student;
3.4 新增、修改、删除、查询数据
# insert数据
db.test.insert({_id:"n0001",no:"s0001",name:"张华",age:12})
db.test.insert({_id:"n0002",no:"s0002",name:"张明",age:11})
db.test.insert({_id:"n0003",no:"s0003",name:"张远",age:13})
db.test.insert({_id:"n0004",no:"s0004",name:"刘芳",age:12})
# find查询所有
db.test.find()
# 修改
db.test.update({_id:"n0001"},{$set:{name:"张华-new"}})
# 删除
db.test.remove({_id:"n0001"})
# 根据id精确查询
db.test.find({_id:"n0002"})
db.test.find({_id:/n000/"})
# 模糊查询
db.test.find({_id:/n000/})
db.test.find({name:/张/})
# 根据年龄(大于、小于)
db.test.find({age:{$gt:12}})
db.test.find({age:{$gte:12}})
db.test.find({age:{$lt:12}})
db.test.find({age:{$lte:12}})
# 分页查询
db.test.find().skip(2).limit(2)