[python全栈]07.MongoDB(1)

目录

  1. 数据库相关概念
  2. 关系型数据库
  3. 非关系型数据库
  4. MongoDB介绍
  5. 数据库操作
  6. 集合操作
  7. 文档介绍
  8. 插入文档

1. 数据库相关概念

数据的存储阶段
文件管理阶段(.txt ;.doc ;.xls ......)
	优点: 使用简单, 展现直观, 可以长期保存数据, 可存储数据量比较大 
	缺点: 数据查找不方便, 容易造成数据冗余, 格式不规范
数据库管理阶段
	优点: 将数据结构化存储, 降低冗余, 提高了增删改查效率
			方便扩展, 方便程序调用
	缺点: 数据库往往需要指令或语句操作, 相对复杂
	
几个相关概念:
数据: 能够输入到计算机中并被识别处理的信息的集合
数据结构: 组成一个数据集合的数据之间的关系
数据库: 按照一定数据结构, 存储数据的仓库
		数据库是在数据库管理系统管理和控制下, 在一定介质上的数据集合
数据库管理系统: 数据库管理软件, 用于建立维护操作数据库
数据库系统: 由数据库和数据库管理系统等开发工具组成的集合

2. 关系型数据库

关系型数据库::采用关系模型(二维表(行,列))来组织数据结构的数据库
		Oracle	DB2	SQLServer	MySQL	SQLite(python唯一标准库支持数据库)
		对比非关系型数据库:
		优点: 容易理解, 逻辑类似常见的表格, 使用方便, 都使用SQL语句
				SQL语句非常成熟, 数据一致性高, 冗余低, 数据完整性好, 便于操作
				技术成熟, 功能强大, 支持很多复杂操作
		缺点: 每次操作都要进行SQL语句解析, 消耗较大
				不能很好的满足并发需求, 特别是海量数据爆发, 关系型数据库读写能力会显得不足
				关系型数据库往往每一步都要加锁操作, 也造成数据库的负担
				数据一致性高, 有时也会使数据存储不灵活

3. 非关系型数据库

非关系型数据库(NoSql --->not only sql): 
优点: 高并发, 读写能力强
		弱化数据结构一致性, 使用更加灵活
		有良好的可扩展性
缺点: 通用性差, 没有SQL语句那样通用的语句
		操作灵活导致容易出错和混乱
		没有外键关联等复杂的操作
NoSql 使用场景:
	1.对数据存储灵活性要求高, 一致性要求低
	2.数据处理海量并发, 要求瞬间效率速度比较高
	3.数据比较容易建立NoSql模型
	4.网站临时缓冲存储, 爬虫应用
Nosql分类: 
	1.键值型数据库	Redis
	2.文档型数据库	MongoDB
	3.列存储数据库	HBase
	4.图形数据库		应用较少

4. MongoDB介绍

MongoDB 数据库: 
	非关系型数据库 ; 文档型数据库 ; 最像关系型的非关系型数据库
特点:
	1.C++编写的数据库管理系统
	2.支持丰富的数据操作, 增 删 改 查 索引 聚合
	3.支持丰富的数据类型
	4.使用方便, 可以很好的扩展, 相对比较成熟
	5.支持众多的编程语言接口 (Python PHP C++ C#)
MongoDB 安装
自动安装:
	sudo apt-get install mongodb
	默认安装位置 : /var/lib/mongodb
	配置文件位置: /etc/mongodb.conf
	命令集: /usr/bin ; /usr/local/bin

MongoDB 命令
设置数据库的存储位置
$mongod --dbpath 目录
设置数据库监听端口(default:27017)
$mongod --port 8080

进入数据库交互操作界面
	>>>mongo shell:用来操作MongoDB数据库的界面
			在这里可以使用Mongo语句操作数据库内容
$mongo
	mongo shell >>> quit() / Ctrl+c / exit 退出
MongoDB数据库的组织结构:
	键值对 ---> 文档 ---> 集合 ---> 数据库
	
MySQL:
------------------------
ID	|	NAME	|	AGE
------------------------
1	|	Lily	|	17
------------------------
2	|	Lucy	|	18
------------------------
MongoDB:
{"ID":1,"NAME":'Lily',"AGE":17},
{"ID":2,"NAME":'Lucy',"AGE":18}
MongoDB 和 MySQL 概念比较
mysql		mongodb			含义
-------------------------------------
database	database		数据库
table		collection		表/集合
column		field			字段/域
row			document		记录/文档
index		index			索引

5. 数据库操作

创建数据库:
use databaseName
	eg:创建一个名字为stu的数据库 use stu
	* use 实际为选择使用哪个数据库,当数据库不存在时会自动创建
	* 数据库命名规则:
			1. 使用utf-8字符(mongo默认支持utf-8)
			2. 不能含有 空格 . / \ '\0' 字符
			3. 长度不能超过64字节
			4. 不能和系统数据库重名
			5. 严格区分大小写
			
查看系统中的数据库:
show dbs
	系统数据库
	admin(存储用户信息) / local(存储本地数据) / config(存储分片信息) 
	*use 后后不会立即创建出数据库,而是需要等到插入数据时,数据库才会创建
	
插入数据:
db.class.insert({'name':'Lily','age':17,'sex':'w'})
>>>WriteResult({'nInserted':1})
db: mongodb的全局量, 代表当前正在使用的数据库
	* 如果不选择使用任何数据库db代表test, 直接插入数据就会建立test数据库

数据库的备份和恢复
备份: $mongodump -h host -d dbname -o bak
			eg: $ mongodump -h 127.0.0.1 -d stu -o bak
恢复: $mongorestore -h host:port -d dbname dbname2 path
			eg: mongorestore -h 127.0.0.1:27017 -d res bak/test
数据库的监测:
$ mongostat 监测数据库运行数据
>>>
	insert query update delete 每秒 增 查 改 删 的次数
	flushes 每秒和磁盘交互次数
	vsize 虚拟内存  res 物理内存 
	time 时间
$ mongotop 监控数据库的读写时长
ns(数据表)	total(总时间)	read(读时间)	write(写时间)

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

6. 集合操作

创建集合: --->MySQL中的表
	1.db.createCollection(collection_name)
		>>> db.createCollection('class1')
		>>> show collections
	2.当向一个集合中插入数据时, 如果集合不存在则会自动创建
		db.class2.insert()		#向db数据库中集合 class2 中插入数据

查看数据库中的集合
	show collections
	show tables
集合命名规则: 
	1. 合法的utf-8字符
	2. 不能有 '\0'
	3. 不能以system. 开头, 这是系统保留集合前缀
	4. 不能和关键字重名

删除集合
db.collection_name.drop()
集合的重命名
db.collection_name.renameCollection("name2")

7. 文档介绍

文档: 
mongodb中数据的基本组织形式 ---> 文档对象
mongodb文档 : 是以键值对的形式组成的一组数据
				类似python中字典描述数据的方式
键: 表示文档的域, 表达了一个键值对的含义
	键的命名规则:
		1. utf-8格式字符串
		2. 不能使用'\0'
		3. 一个文档中的键不能重复
值: 即文档存储的数据
注:
	1. 文档中键值对是有序的(和字典不同)
	2. 文档中键值对严格区分大小写
bson 数据类型 ---> json ---> Javascript
类型					值
整型				整数 1 2 3 4
布尔类型				true false
浮点型				小数
Array				数组

Date				时间日期
Timestamp			时间戳

String				字符串
Symbol				特殊字符串
Binary data			二进制字符串

Null				null 空值
Object				内部文档(对象)(值为文档)
code				js代码
regex				正则子串
ObjectId			自动生成ID标记
			(_id:当mongodb插入文档时,如果不指定_id域则自动生成_id域
			值: 如果不指定则会自动生成一个ObjectId值)
			24位16进制 使用ObjectId()经过算法处理保证其唯一性
			8位 文档创建时间 6位 机器ID 4位 进程id 6位计数器
			
集合中的文档:
1. 集合中的文档不一定有相同的域(个数不同|域不相同|数据类型不同)
2. 集合中文档各自比较独立, 相互并不影响
集合创建原则:
	1. 集合中的文档要描述同一类事物
	2. 数据库中同一类数据尽量集中存放在相同的集合
	3. 集合中的文档嵌套层数不要太多

8. 插入文档

db.collection_name.insert({})	#插入单个文档
db.collection_name.insert([{},{},{}...]) #插入多个文档
功能: 插入一个或多个文档
参数: 要插入的文档
	eg:db.class.insert({"name":'Lucy',"age":18,"sex":'w'})
		#对_id赋值, 键可以不加 " " 
		db.class.insert({'_id':1,name:"Jam",age:16,sex:'m'}) 
		#插入多个文档
		db.class.insert([{name:"Alex",age:19,sex:'m'},{name:'Abby',age:18,sex:'w'}])
注:
	1. 插入操作中键可以不加引号
	2. 查看插入结果 db.collection_name.find()
	3. _id值可以自己插入, 但是不能重复, 它是默认的主键

其他插入方法:
db.collection_name.insertOne({})	#插入单个文档 
	eg: db.class.insertOne({name:'Levi',age:20,sex:'m'})
db.collection_name.insertMany([{},{},...])	#插入多个文档 
db.class.insertMany([{name:"John",age:16,sex:'m'},{name:'Lenzer',age:17,sex:'m'}])

save插入文档
db.collection_name.save()
#正常插入情况下和insert用法一样
db.class.save({name:'Allen',age:19,sex:'m'})
db.class.save([{name:'Sunny',age:17,sex:'w'},{name:'Alice',age:16,sex:'w'}])
#特殊情况: 如果插入数据有_id域,且_id域值存在时会修改/覆盖原有文档,如果该值不存在则正常插入
db.class.save({_id:2,name:'Mary',age:20,sex:'w'})

获取集合对象方法:
db.class ===> db.getCollection('class')
db.class.insert() = db.getCollection('class').insert()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值