入门一个新的非关系型数据库
原文:https://www.cnblogs.com/clsn/p/8214194.html#auto_id_13
MongoDB是什么?
MongoDB并非芒果的意思,而是源于 Humongous(巨大)一词。
MongoDB的特性:
1.灵活动态文档模型
2.高可用(ReplicaSet)
3.水平扩展(Sharding)
还支持二级索引、动态查询、全文搜索 、聚合框架、MapReduce、GridFS、地理位置索引、内存引擎 、地理分布等一系列的强大功能。
缺点
多表关联: 仅仅支持Left Outer Join
SQL 语句支持: 查询为主,部分支持
多表原子事务: 不支持
多文档原子事务:不支持
16MB 文档大小限制,不支持中文排序 ,服务端 Javascript 性能欠佳
关系型数据库和MongoDB对比
存储方式对比
在传统的关系型数据库中,存储方式是以表的形式存放,而在MongoDB中,以文档的形式存在。

数据库中的对应关系,及存储形式的说明

MongoDB与SQL的结构对比详解

MongoDB数据存储格式
JSON格式
JSON 数据格式与语言无关,脱胎于 JavaScript,但目前很多编程语言都支持
JSON 格式数据的生成和解析。JSON 的官方 MIME 类型是 application/json,
文件扩展名是 .json。
MongoDB 使用JSON(JavaScript ObjectNotation)文档存储记录。
JSON数据库语句可以容易被解析。
Web 应用大量使用,NAME-VALUE 配对
{name: "asu",age: "21",sex: "man"}
BSON格式
BSON是由10gen开发的一个数据格式,目前主要用于MongoDB中,
是MongoDB的数据存储格式。BSON基于JSON格式,选择JSON进行改造的原因
主要是JSON的通用性及JSON的schemaless的特性。
二进制的JSON,JSON文档的二进制编码存储格式
BSON有JSON没有的Date和BinData
MongoDB中document以BSON形式存放
db.meeting.insert({meeting:“M1 June",Date:"2018-01-06"});
MongoDB的优势
- MongoDB是开源产品
- On GitHub Url:https://github.com/mongodb
- Licensed under the AGPL,有开源的社区版本
- 起源& 赞助by MongoDB公司,提供商业版licenses 许可
JSON 文档模型、动态的数据模式、二级索引强大、查询功能、自动分片、水平扩展、自动复制、高可用、文本搜索、企业级安全、聚合框架MapReduce、大文件存储GridFS
MongoDB常用数据类型
| 数据类型 | 描述 |
|---|---|
| String | 存储数据常用的类型,在MongoDB中,UTF-8编码的字符串才是合法的 |
| Integer | 用于存储数值,根据采用的服务器,分为32位和64位 |
| Boolean | 存储布尔值 |
| Double | 双精度浮点值 |
| Min/Max keys | 将一个值与BSON(二进制的JSON)元素的最低值和最高值相对比 |
| Arrays | 用于将数组或列表或多个值存储为一个键 |
| Timestamp | 时间戳,记录文档修改或添加的具体时间 |
| Object | 用于内嵌文档 |
| Null | 用于创建空值 |
| Symbol | 符号,基本上等同于字符串类型,但是一般采用特殊符号类型的语言 |
| Date | 日期时间,用UNIX时间格式来存储当前时间或日期 |
| Object ID | 对象ID,用于创建文档的ID |
| Binary Data | 二进制数据,用于存储二进制数据 |
| Code | 代码类型,用于在文档中存储JavaScript代码 |
| Regular expression | 正则表达式类型,存储正则表达式 |
MongoDB基本语法
数据库
show dbs;查看所有的数据库
db;查看当前窗口所在的数据库
use 数据库名;如果数据库不存在,则创建数据库,否则切换到指定数据库
db.dropDatabase(); 删除当前数据库
你可能有这样的疑问,为什么用show dbs;没有显示test数据库,而使用db查看当前所在数据库时,显示test,这是因为test数据库刚开始没有数据并且是在内存中的,有了数据就会显示出来.
集合
db.createCollection("集合名称")
显式创建集合,创建完成后会返回{"OK",1}json串
db.集合名称.insert({name:"asu",age:21})
隐式创建集合,并插入数据,如果不存在就先创建集合再插入数据
返回WriteResult({"nInserted":1})
show collections;查看集合
db.集合名称.count();统计集合中的数据数量
db.集合名称.drop();删除集合
MongoDB还支持js,可通过js实现批量处理
如,for(var i = 0;i < 100;i++){
db.集合名称.insert({name:"asu",score:99})
}
固定集合
固定集合指的是事先创建并且大小固定的集合。
特性:固定集合很像环形队列,如果空间不足,最早的文档会被删除,为新的文档腾出空间。一般来说,固定集合适用于任何想要自动淘汰过期属性的场景,没有太多的操作限制。
db.createCollection("集合名称",{capped:true,size:10000,max:100});
size指文档大小,单位KB,max指定文档数量
文档数量必须同时指定大小,淘汰机制只有在容量还没满时才会依据数量来工作,
要是容量满了,则会依据容量来工作。
查询
MongoDB中每条数据都有一个_id,用来标识一条数据,id由MongoDB自身维护。
db.集合名称.find();查询集合的所有数据
例:db.scr.find({age:7})查询年龄为7的数据
db.scr.find({age:21},{name:1})
查询年龄为21的数据,只返回name字段数据;两个大括号,前面的存查询条件,后面的存返回条件;返回条件字段1表示true,表示此字段返回,如果name后面的1改为0则表示不返回该字段,返回除该字段以外的其他字段。
注意
如果返回字段有为0的字段表示已经查询了除该字段以外的所有字段,那么其他字段就不能在设置为1了,会有语法冲突
db.集合名称.find({age:11,name:'ss'},{name:1,age:1})
查询age为11,name为ss的数据,返回name和age字段
多条件查询此处是并列的,如果多个条件都相同的话,如{name:‘a’,name:‘e’}
则只会查询后一个条件的数据
db.集合名称.find({},{age:1})
查询所有数据,返回age字段
db.集合名称.findOne();
返回集合第一条数据
筛选查询
1.gt 大于
2.lt 小于
3.gte 大于等于
4.lte 小于等于
5.ne 不等于
例:db.集合名称.find({age:{$gt:10}});
包含查询
db.集合名称.find({price:{$all:[1,2]}});
包含...并且包含...price是个数组,查询所有price包含1和2的数据
db.集合名称.find({price:{$in:[1,2]}});
包含...或者包含...查询price包含1或者包含2的数据
db.集合名称.find({price:{$nin:[1,2]}});
不包含...并且不包含...查询price不包含1并且不包含2的数据
db.集合名称.find({$or:[{name:'aa'},{price:{$in[3]}}]});
...或者...查询name为aa或者price包含3的数据
db.集合名称.find({$nor:[{name:'aa'},{price:{$in[3]}}]});
既不...也不... 查询name既不为aa,price也不包含3的数据
分页
db.集合名称.find().skip(0).limit(10);
表示从0查询,查询十条
skip()方法默认参数0,表示跳过的条数
limit()参数表示一页几条数据
排序
db.集合名称.find().sort({age:1})
按照年龄升序排列,-1则为降序排列
存在
db.集合名称.find({age:{$exists:1}})
查询存在hight字段的数据
删除
db.集合名称.remove({age:12,name:'aa'});
删除age为12,name为aa的数据
更新
db.集合名称.update({age:11},{name:lll})
本意是将age为11的数据name更新为lll,实际是将原始的数据覆盖为新的数据
索引
MongoDB默认为每条数据的_id字段建索引
db.集合名称.ensureIndex({age:1})为age字段创建普通索引
db.集合名称.dropIndex({age:1})删除age字段的索引
db.集合名称.ensureIndex({age:1},{unique:true})
为age字段创建唯一索引,在为字段创建唯一索引后就不能再添加相同值的记录了
数据备份与恢复
备份:mongodump -h dbhost -d dbname -o dbdirectory
-h: 服务器地址,127.0.0.1也可以指定端口号:127.0.0.1:27017
-d: 需要备份的数据库实例
-o: 需要备份的数据存放的位置,(如果没有则自动创建)
恢复: mongorestore -h dbhost -d dbname -directoryperdb dbdirectory
-directoryperdb备份数据所在位置
恢复时要在退出mongo命令行下执行
导入与导出
导出: mongoexport -h dbhost -d dbname -c collectionName -o output
-h: 数据库地址
-d: 指明使用的库
-c: 指明要导出的集合
-o: 指明要导出的文件路径加文件名,文件名可以是txt,word,excel等多种文件格式
导入: mongoimport -h dbhost -d dbname -c collectionname 文件的路径地址
注意:导入时要在退出mongo命令行状态下执行
本文详细介绍了MongoDB的背景、特点、数据类型、基本语法、查询操作、索引管理及数据备份恢复等内容,适合初学者快速掌握MongoDB的使用。
856





