1.简介
mongoDb是一款性能非常优秀的nosql型文档数据库,横向扩展支持很大数据量和并发。
主要特点:
-
存储数据模型是json
-
不需要提前创建数据模型
-
4.0后支持分布式事物
-
多形性(同一个集合可以包含不同字段(类型)的文档对象
-
动态性(线上修改数据模式,修改时应用于数据库无续修改schema)
-
数据治理(支持对collection进行json scheme来规范数据模式)
目前mongo有两个版本,开源版与企业版
2.发展历程
-
2008年起步
-
2010 1.x支复制集与分片集
-
2012 2.x更丰富的数据库功能
-
2014 3.x 整合WiredTiger引擎和周边生态环境
-
2018 4.x 分布式事务
3.与关系型数据库比较
MongoDb | RDBMS(关系型数据库) | |
---|---|---|
数据模型 | json文档模型 | 关系模型 |
数据库类型 | OLTP | OLTP |
CRUD操作 | MQL/SQL | SQL |
高可用 | 复制集 | 集群模式 |
横向扩展能力 | 通过原生分片完善支持 | 数据分区或者应用侵入式 |
索引支持 | B-树、全文索引、地理位置索引、 多键(multiKey)索引、TTL索引(自动过期) | B+树(mysql) |
开发难度 | 简单 | 困难 |
数据容量 | 没有理论上限 | 千万、亿 |
扩展方式 | 垂直扩展+水平扩展 | 垂直扩展 |
4.数据库搭建
-
从mongoDb官网下架社区或者企业版
-
还可申请mongo免费的私人db
5.基本操作(MQL)
-
insert db.collection.insert([{"a":"1"},{"b":2} ])
-
find db.collection.find($and($or):[{"a":"1","..."},{}],{"_id":0})
-
$or 或
-
$and 且
-
$gt 大于
-
$gte 大于等于
-
$lt 小于
-
$lte 小于等于
-
$in 在数组中
-
$nin 不在数组中
-
$ne 不等于
-
$exists 存在 false/true
-
-
remove db.collection.remove({"a":"1"}) //需要制定参数
-
update db.collection.updateOne\Many({"a",1} (条件),{$set:{"a":1}}(设置)}
-
$push 增加到数组底部
-
$pushAll 增加多个对象到底部
-
$pop 从数组底部删除一个对象
-
$pull 如果匹配制定的值,从数组中删除相应的对象
-
$pullAll 如果匹配任意的值,从数据中删除相应的对象
-
$addToSet 如果不存在则增加一个值到数组
-
-
drop 删除集合与索引 db.collection.drop()
-
dropDatebase
数据聚合操作
整个聚合运算称为管道,由多个步骤组成:
每个管道:
-
接受一系列文档
-
每个步骤对这些文档进行一系列运算
pipeline =[$stage1,$stage2....]
dp.collection.aggregate(
pipeline,
{options}
);
步骤类型:
-
$match
-
$project 投影 as
-
$sort
-
$group
-
$skip/$limit 结果限制
-
$lookup 左外连接
-
$unwind 展开数组
-
$graphLookup 图搜索
-
$facet/$bucket 分组搜索