基本概念
- 应用型数据库,支持海量数据存储
- 支持副本机制、分片机制,为分布式应用而生
- 可动态建模,没有特定字段格式
- 以JSON格式为数据模型的文档型数据库
- 相比关系型数据库MySQL,MongoDB性能更高
- 原生支持数据分片、高可用、支持垂直与水平扩展
- 索引支持:B+Tree、全文索引、地理位置索引等
- db-engines 排名
- 对应概念:集合对应表、字段对应列、内嵌数组/对象或引用字段对应表关联
快速实战
- 官网下载,解压,配置下环境变量
- 创建数据目录 默认为 /data/db
- 后台启动:
mongod --fork --logpath /data/logpath/output.out
- 端口默认27017,IP默认绑定为127.0.0.1(早期出过事)
mongo //客户端连接
db //命令查看当前库
show databases //查看所有库
use demo //创建并选择demo库
db.members.insertOne({"name":"qinchen","age":19}); //插入数据
show tables / show collections //查看集合
db.members.find(); // 查询数据 _id 主键 默认自动生成,可手动指定,
// _id按时间基本有序,但不保证绝对有序,前面几个字节即表示时间戳
db.members.insertMany([{},{}]) // 批量插入多条数据,可配置Ordered有序无序
db.members.find({}).pretty() // 格式化结果
- 图形界面客户端
- writeConcern 安全级别 与 复制集 相关
- 条件查询支持:通过ID精准查询、按字段查询、多字段查询、嵌套查询(字段.属性)
- 查询可指定返回字段 .find({},{attr1:1,attr2:1}) 1 表示显示
- 条件支持:
- 支持模糊查询
- 支持复合组件:
insert({_id:{p1:'110',p2:'180'}})
// 注意顺序 attr1:{$exisits:true}
字段必须存在条件find().skip(1).limit(2).count(true)
跳过1条,最多取2条find().sort({attr1:1})
// 1 正序,-1倒序find({},{tag:{$slice:2}})
// 取tag数组前2个元素- 更新数据:
upateOne/updateMany | $set $unset $push $pop $pull $pullAll $addToSet
- 其他:$set 更新或新增字段 $rename 重命名字段 $inc 加减字段值 $mul 乘 $min 取最小值、$max 取最大值
- 删除文档 db.collection.remove(条件)
- 删除集合 db.collection.drop() // 删除所有数据及索引
其他问题
- Redis与MongoDB,一个数据存内存,一个存磁盘
- MongoDB事务机制出来不久,目前应用较少
- 适合一些数据对象属性变化较频繁业务,比如商品详情
- MongoDB核心业务一般应用较少,常用在部分大数据分析业务