MongoDB 别翻了,这篇就够了!!!

本文详细介绍了MongoDB的背景、特点、数据类型、基本语法、查询操作、索引管理及数据备份恢复等内容,适合初学者快速掌握MongoDB的使用。

入门一个新的非关系型数据库

原文: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的优势
  1. MongoDB是开源产品
  2. On GitHub Url:https://github.com/mongodb
  3. Licensed under the AGPL,有开源的社区版本
  4. 起源& 赞助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包含12的数据
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命令行状态下执行

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值