笔记_MongoDB_1_概念 数据类型

MongoDB_1_概念 数据类型


数据存储阶段

文件管理阶段(.txt .doc .xls)

优点:

  • 数据便于长期保存
  • 数据可以大量存储
  • 使用简单
    缺点:
  • 数据的存储结构比较随意
  • 数据的查找修改效率较低
  • 不方便扩展和程序调用

数据库管理阶段

优点:

  • 数据格式化存储,便于操作
  • 降低了数据的冗余,提高了增删改查的效率
  • 方便程序调用和扩展
    缺点:
  • 使用上往往需要特定的语句或操作,相对复杂

数据库概念:

**数据:**能够输入到计算机中并被识别处理的信息集合。
**数据结构:**研究一个数据集合中,数据之间关系的学科。
**数据库:**按照数据结构,存储管理数据的仓库。
**数据库:**按照数据结构,存储管理数据的仓库。数据库是在数据库管理系统管理和控制下,在一定介质上存储的数据集合。
**数据库管理系统:**数据库管理软件,用于维护建立数据库。
**数据库系统:**由数据库和数据库管理系统等开发工具组成的集合。


关系型数据库

采用关系模型(二维表)来组织数据结构的数据库。

eg.: Oracle DB2 SQLServer Mysql Sqlite
优点:

  • 容易理解,逻辑类似常见的表格
  • 使用方便,都使用sql语句进行数据操作,sql语句很成熟
  • 数据的一致性高,冗余低,完整性好
  • 相对非关系型,技术成熟,可以使用表关联等复杂操作
    缺点:
  • 每次数据操作都需要sql解析,消耗较大
  • 关系型数据库内部操作往往都需要加锁,也影响了处理速度
  • 不能很好的处理海量数据的高并发需求,读写能力差
  • 由于数据的一致性等规定,灵活性也不高

非关系型数据库 (NoSql --> Not Only Sql)

优点:

  • 并发能力强,读写速度快,可以更好应对海量数据并发需要
  • 普遍比较灵活,容易扩展,弱化了数据的一致性
    缺点:
  • 通用性差,没有像sql那样一致的语句操作
  • 灵活性强会导致一定的操作混乱
  • 技术成熟度比关系型数据库要差

NoSql的使用情况

  1. 对数据一致性要求较低
  2. 应对数据提高并发存储的可能性较大
  3. 比较容易建立非关系型数据库模型

NoSql分类

  1. 键值型数据库:Redis
  2. 列存储数据库:HBase
  3. 文档型数据库:MongoDB
  4. 图形数据库

MongoDB数据库 (非关系型,文档型数据库)

特点:

  1. 由c++编写的数据库管理系统
  2. 支持丰富的增删改查操作
  3. 丰富的存储类型,技术相对成熟
  4. 支持众多的编辑语言操作
  5. 使用方便,便于扩展和部署

MongoDB的安装

linux: sudo apt -get install mongodb
安装位置:/var/lib/mongodb
配置文件位置:/etc/mongodb.conf
命令集位置:/usr/bin

手动安装

  1. www.mongodb.com 下载对应系统的安装包
  2. 将压缩包解压到一个目录下,/usr/local
  3. 进入解压后的目录,里面的bin目录即命令集所在目录,将这个目录(bin)路径加入环境变量即可。

eg.: 将/opt/mongodb/bin/ 加入环境变量,终端执行
PATH=$PATH:/opt/mongodb/bin
export PATH

  1. 如果不想每次启动都执行则将以上两句写入主目录下的 .bashrc中

MongoDB 命令

1.设置数据库的存储位置:momgod --dbpath 目录

eg.:将database目录设置为数据
mongod --dbpath database

2.设置数据连接接口:mongod --port port
(如果不设置,则默认端口为 27017)

3.启动MongoDB操作界面(mongo sbell):mongo
退出界面:quit( ) 或者 ctrl+c


MongoDB数据库结构

键值对 >> 文档 >> 集合 >> 数据库

IDnameage
1lily18
2lucy17
mysqlmongodb含义
databasedatabase数据库
tablecollection表/集合
columfield字段/域
rowdocument记录/文档
indexindex索引

MongoDB操作命令

创建数据库:
use database

eg.: 创建一个叫stu的数据库
  use stu
use 实际是选择使用哪个数据库,当这个数据库不存在时会自动创建这个数据库。
使用use创建数据库,并不会马上建立起来,而是需要真正插入数据时才会产生。

查看系统中数据库:
show dbs
数据库命名规则:

  1. (默认)使用utf-8字符(支持中文)
  2. 不能含有 空格 . / \ '\0’字符
  3. 长度不超过64字节
  4. 不要和系统数据库重名

全局变量db
db变量代表当期正在使用的数据库 ,如果不选择任何数据库,db为test

删除数据库
db.dropDatabase( ) # 删除db代表的数据库


数据库的备份和恢复:

备份数据库
mongodump -h dbhost -d dbname -o dir
说明:dbhost表示主机地址;dbname表示要备份的库名;dir表示备份的目标目录

eg.: mongod -h 127.0.0.1 -d stu -o .
备份本机中(127.0.0.1)的(stu数据库)到(当前目录)

数据库文件恢复:
mongorestore -h dbhost:port -d dbname path
说明:dbhost:port表示主机地址:默认端口;dbname表示要恢复到的目标库名;path表示被恢复文件的路径

eg.: mongorestore -h 127.0.0.1:27017 -d student ./stu
获取数据 到本机 的student数据库中, 从stu


数据库的监控命令:

mongostat: 查看数据库运行状态

insert query update delete: 每秒执行增删改查的次数
command:  每秒执行mongo命令的次数
flushes:   和磁盘交互情况
vsize res:  使用虚拟内存和物理内存情况
time:    运行时间

mongotop: 检测每个数据库中数据表的读写情况

ns:    数据集合
totol:  总时长
read:  读时长
write:  写时长


关于集合(collection)的操作

创建集合
方法1: db.createCollection(collection集合名)

eg.: db.createCollection(‘class1’) #创建集合class1

方法2: 当插入数据时,需要指定集合,如果集合不存在,则自动创建

eg.: db.class2.insert({‘name’:‘阿宝’,‘age’:‘35’,‘sex’:‘m’})
插入数据时class2不存在则自动创建这个集合

查看数据库中集合
show collections 或者 show tables**

集合的命名规则

  1. 使用utf-8字符
  2. 不能含有 \0 字符
  3. 不要以system.开头,这是系统集合默认开头
  4. 不要和关键字重复

删除集合
db.collection.drop( )

eg.: db.class.drop( ) #删除数据库中class集合

集合重命名
db.collection.renameCollection('newname')

eg.: db.class.renameCollection(‘class0’)
将集合class重命名为class0


文档

什么是文档?

  • 文档是mongodb数据库中基本的数据组成,形式类似于文档
  • 文档由键值对构成,每个键值对表达一个数据项
  • mongodn文档属于bson类型数据
  • 文档中的键值对是有序的

键:即文档的‘域’,表达‘值是什么内容’。
键的命名规则:

  1. 使用utf-8字符串
  2. 不能使用\0
  3. 一个文档中的键不能重复

值:即数据库存储的数据

类型
数字整数 小数
布尔类型true false
Array数组
Date日期时间
Timestamp时间戳(时间结点)
String字符串
Binary data二进制字符串
Null空 null
Object内部文档(对象)
regex正则表达式
code代码
ObjectIDObjectID字典

ObjectID类型

"_id" : ObjectId("5bd13bb108b2199bcf4586e6")
_id: 当插入mongodb文档时,会自动生成_id域作为主键id.
值: ObjectId数据,为了和其他的值不重复,
   (24位16进制编码:8位文档创建时间,6位机器ID,4位进程ID,6位计数器)。

集合中的文档

  1. 每个集合中的文档格式可以不同
  2. 一个集合当中存储的数据尽量体现相同的内容
  3. 文档的表达,层次尽量不要太多

插入文档**:

插入单个文档
db.collection.insertOne( )
功能:插入一条文档
参数:要插入的文档

eg.: db.class0.insertOne({‘name’:‘Lucy’,‘age’:‘17’,‘sex’:‘W’})
向class0中插入一个文档{… }

db.class.find( ): 查看插入结果(文档)
数据操作时,键可以不加引号
可以自己添加_id域,但是_id域的值不能重复
一个集合中插入的文档是有序的

插入多条文档
db.collection.insertMany([{ },{ },{ }...])
功能:插入多个文档
参数:数组中包含多个文档

eg.: db.class2.insertMany([{name:‘傻屌’,age:30,sex:‘w’},{name:‘阿花’,age:‘18’,sex:‘w’}])

插入文档 >:db.collection.insert( )
功能:等于 insertOne + insertMany

save插入文档 >:db.collection.save( )
功能:插入文档,用法与insert相同
参数:与insert相同,可以插入一条或多条文档

eg.: db.class1.save([{name:‘小明’,age:22,sex:‘M’},{name:‘小张’,age:22,sex:‘M’}])

如果要插入的文档_id已经存在,则会替换掉原有文档的内容

eg.: db.class0.save({"_id":1,“name”:“Hanna”,“age”:28,“sex”:“W”})

获取集合对象
db.getCollection(collection_name)

eg.: db.getCollection(‘class0’) <==> db.class0


查找操作:

mysql: select ... from table where ...
mongodb: db.collection.find(query, field)

查找集合中所有内容(文档)
db.collection.find( )  # 类似于select * from table

find(query, field)
功能:查找所有符合条件的文档
参数 query: 表示【筛选条件】,是一个键值对文档,默认表示查找所有内容。

eg.: db.class0.find({age:17}) # 筛选所有年龄为17的文档


参数 field:

表示要【查找的域】,是一个键值对文档,用0表示不查找某个域,1表示查找某个域。

eg.: db.class0.find({},{_id:0,name:1}) # 不查找_id,查找name

当某个普通域设置为 0 时,表示该域不查找,其他的域的域查找; 如果设置为 1 则表示查找,其他的不查找.
对于查找的域,在表达式值0和1不能在参数中同时出现。
_id域比较特殊,如果不想查找必须明确 _id:0。

findOne(query, field)
功能:查找第一条符合条件的文档
参数:使用方法同find

eg.: db.class0.findOne({age:17},{_id:0}) # 筛选所有年龄为17的第一条文档


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值