【慕课网课程笔记】MongoDB基础入门

课程目的

  • 熟悉MongoDB数据库各种概念
  • 学会MongoDB的搭建
  • 熟悉MongoDB的使用
  • 简单运维

课程面向对象

  • 热爱学习的小白
  • 使用过一段时间MongoDB的工作人员

MongoDB的概念

  1. MongoDB
  2. mongo
  3. 索引
  4. 集合
  5. 复制集
  6. 分片
  7. 数据均衡

学会MongoDB的搭建

部署数据库服务

  1. 搭建简单的单机服务
  2. 搭建具有冗余容错功能的复制集
  3. 搭建大规模数据集群
  4. 完成集群的自动部署

熟悉MongoDB的使用

最基本的文档读写更新删除
各种不同类型的索引的创建与使用
复杂的聚合查询
对数据集合进行分片,在不同分片间维持数据均衡
数据备份与恢复
数据迁移

简单运维

部署MongoDB集群
处理多种常见的故障
|——单节点失效,如何恢复工作
|——数据库意外被杀死如何进行数据恢复
|——数据库发生拒绝服务时如何排查原因
|——数据库磁盘快满时如何处理

课程面向对象

  1. 热爱学习的小白
  2. 使用过一段时间MongoDB的工作人员

初级 背景知识,基本操作
中级 常见的部署操作,简单运维
高级 介绍集群及大型集群的运维经验及mangoDB的实现原理、常见问题及解决办法

如何运维一个几十T甚至上百T的数据库
如何维持几十个甚至上百个节点的数据库均衡

几个重要的网站

  1. MongoDB官网 www.mongodb.org
    安装包下载
    使用文档
  2. 国内官网:www.mongoing.com
  3. 中文MongoDB文档地址
    docs.mongoing.com
  4. github https://github.com/mongodb
    源码下载
  5. MongoDB的jira https://jira.mongodb.org
  6. 两个Google groups : mongodb-user和mongo-cn

关于数据库

数据库概念:

  1. 有组织地存放数据
  2. 按照不同的需求进行查询

数据库的分类

  1. sql数据库:支持sql语言的数据库
    Oracle,MySQL...
  2. Nosql 数据库:不支持sql语言的数据库
    Redis,MongoDB
    Not only sql
sql数据库 NoSql数据库
实时一致性 简单便捷
事务 方便扩展
多表联合查询 更好的性能

为什么选择MongoDB

无数据结构限制

1. 没有表结构的概念,每条记录可以有完全不同的结构
2. 业务开发方便快捷
3. sql数据库需要事先定义表结构再使用

完全的索引支持

1. redis 的key-value
2. hbase 的单索引,二级索引需要自己实现
    单键索引,多键索引:{x:1,y:1}
    数据索引:["apple","lemon"]
    全文索引: "i am a little bird."(中文)
    地理位置索引:2D

方便的冗余与扩展

1. 复制集保证数据安全
2. 分片扩展数据规模

良好的支持

1. 完善的文档
2. 齐全的驱动支持

MongoDB运行环境简介

课程相关工具

MongoDB环境 : 64位Linux
MongoDB版本: 2.6.5
ssh工具:xshell
文本编辑器:vim 与 notepad++

编译MongoDB文件

搭建简单的MongoDB服务器

创建 mongodb_simple 文件夹,进入:
创建data 文件夹,保存数据
创建 log 文件夹,保存log
创建 conf 文件夹,存储配置文件
创建 bin 文件夹,存储数据库的二进制文件
将编译好的mongod程序复制到bin目录下。
进入conf文件夹
新建文件mongod.conf并编辑

port = 12345
dbpath = data
logpath = log/mongod.log
fork = true//启动后台进程,Windows中无效

启动mongod:
./bin/mongod -f conf/mongod.conf

MongoDB的基本操作之数据写入和查询

连接数据库
mongo 127.0.0.1:12345
查看数据库
show dbs
切换数据库(如果没有则创建):
user dbname
进入数据库后,删除数据库:
db.dropDatabase()

在MongoDB中,数据表称为集合
往集合中插入数据:
db.集合名.insert(JSONObject)
在MongoDB中使用find进行查询:
db.集合名.find()
skip(Number) 跳过number条记录
limit(Number) 限制显示number条数据
sort({key:1}) 以key排序

> db.test1.find().limit(3).sort({x:-1})
{ "_id" : ObjectId("5b65634af8dc39f7b75514af"), "x" : 5 }
{ "_id" : ObjectId("5b656347f8dc39f7b75514ae"), "x" : 4 }
{ "_id" : ObjectId("5b65633ff8dc39f7b75514ad"), "x" : 3 }
> db.test1.find().limit(3).sort({x:1})
{ "_id" : ObjectId("5b655f5cf8dc39f7b75514ab"), "x" : 1 }
{ "_id" : ObjectId("5b65631cf8dc39f7b75514ac"), "x" : 2 }
{ "_id" : ObjectId("5b65633ff8dc39f7b75514ad"), "x" : 3 }

MongoDB的基本操作之数据更新

数据的更新:
update(condition,newData)

> db.test1.update({x:1},{x:99})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.test1.find()
{ "_id" : ObjectId("5b655f5cf8dc39f7b75514ab"), "x" : 99 }
{ "_id" : ObjectId("5b65631cf8dc39f7b75514ac"), "x" : 2 }
{ "_id" : ObjectId("5b65633ff8dc39f7b75514ad"), "x" : 3 }
{ "_id" : ObjectId("5b656347f8dc39f7b75514ae"), "x" : 4 }
{ "_id" : ObjectId("5b65634af8dc39f7b75514af"), "x" : 5 }

更新部分数据,使用$set操作符:

> db.test1.insert({x:1,y:2})
WriteResult({ "nInserted" : 1 })
> db.test1.update({x:1},{$set:{y:66}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
> db.test1.find({x:1})
{ "_id" : ObjectId("5b6565e9f8dc39f7b75514b0"), "x" : 1, "y" : 66 }

update的第三个参数ifInsert ,true/false
指定在更新一条不存在的数据时是否自动插入数据,默认为false

MongoDB的基本操作之更新多条数据

在MongoDB中update默认只会更新第一条找到的数据
update的第四个参数,multipleupdate,是否更新多条数据:默认为false
在使用multipleupdate的时候,更新的数据只能用$set操作

MongoDB的基本操作之数据删除

remove() 接受一个参数,不允许不传递参数
删除操作默认删除所有查找到的数据

删除集合(表):
db.表名.drop()

MongoDB的基本操作之创建索引

查看集合的索引情况:
db.集合名.getIndexes()
如果在集合的数据非常多时,不建立相应字段的索引,查询,会不返回结果
创建索引:
db.集合名.ensureIndex({key:1/-1})
key为需要创建索引的字段,
value代表方向,1代表正向排序,-1位逆向排序

当负载较重时,不能直接使用这个命令,需要在使用数据库之前就建立好索引。

本章总结

  1. 对数据库与MongoDB简要了解
  2. 熟悉课程环境
  3. 编译完成MongoDB所需的程序
  4. 搭建了简单的MongoDB服务器并进行了简单的使用
  5. 了解了索引的基本使用

你可能感兴趣的:(【慕课网课程笔记】MongoDB基础入门)