1 概述

1.1 文件管理阶段

优点:可以长期保存 能存储大量数据

缺点:没有结构化的组织 查找不方便 数据容易冗余

1.2 数据库管理阶段

有文件存储的优点,同时解决了文件存储的问题

缺点 : 操作难度较高

数据 --> 数据库 --> 数据库管理系统 --> 数据库系统

2 数据库分类

2.1 关系型数据库

采用关系磨性来组织数据结构的数据库

常见数据库形式有:Oracle DB2  SQLServer  Mysql  sqlite

优点:

(1)容易理解,使用方便,sql语句本身比较成熟,而关系型数据库大都采用sql做数据操作

(2)易于维护,完整性好,数据一致性高

(3)通用化程度高,技术成熟,可以使用外链等操作

缺点:

(1)无法很好满足高并发需求,每次数据操作都需要解析sql语句,导致读写能力下降(一般该类型数据库都是用C / C++语言编写的,输入时采用sql语句,需要编译)

(3)针对海量数据的爆发处理能力不足,每次操作都要上锁

(4)扩展性不足

2.2 非关系型数据库 (Nosql not only sql)

优点:

(1)可以满足高并发需求,读写能力强

(2)支持分布式部署

(3)弱化了数据结构,降低了数据的一致性

缺点:

(1)发展比较晚,技术尚不成熟,比如缺少join等复杂性操作,通用性差,没有sql这样的语句

(2)结构灵活,灵活则会导致混乱,写法复杂

非关系性数据库(Nosql)适用那些情况

(1)数据磨性结构简单

(2)对数据的一致性要求低

(3)对数据的并发处理要求高

(4)对数据的扩展性有要求

非关系型数据库Nosql分类

(1)键值类数据库:

redis  oracle  DBD  tokyo

如:name:张三

(2)列存储:

HBase

(3)文档型数据库:

    MongDB

{ name:张三, sex:男}

(4)图形数据库

3 MongoDB数据库

3.1 数据库特点

(1)非关系型 文档型

(2)C++ 编写,支持分布式

(3)数据格式为bson类型,bson格式是jion的升级版,他丰富了json的数据类型

(4)功能比较前面

(5)支持众多编程语言接口 python ruby C#  C++ PHP

3.2 MongoDB的安装

自动安装

在Linux系统中的安装步骤

(1)sudo apt -get update

(2)sudo apt -get install mongodb

默认安装目录:/var/lib/mongodb

配置文件:

/etc/mongodb.conf

/usr/bin

手动安装

(1)www.mongodb.com 下载安装包

(2)在目录下解压  /usr/local/opt

(3)解压后将文件夹中bin目录添加到环境变量中

export PATH = $PATH:/usr...

3.3 mongo的基本操作

在linux终端上输入mongo可以启动mongo shell

tarena@tedu:~$ mongo
MongoDB shell version:
connecting to: test

该模式下支持简单的语法

quit() 退出 mongo shell

mongod

--dbpath:指定数据目录,每个mongod进程都需要独立的数据目录,如果要是有3哥mongod实例,则必须有3个独立的数据目录;当mongod启动时,会在数据库目录中创建mongod.lock文件,这个文件用于防止其他的mongod纯净使用该数据目录

--port:指定服务器监听的端口号,默认端口号为27017,要运行多个mongo进程,则要给每个指定不同的端口号。

--logpath:指定日志的输出路径,如果对文件夹有读写权限,系统会在文件不存在时创建它,它会将已有文件覆盖掉;

--logappend:同logpath,但该选项可不会将原有文件覆盖,而是保留原来的日志

--config:指定配置文件,加载命令行未指定的各种选项

3.4 mongo的基本概念

为了对比,现将关系型数据库mysql与mongo进行对比

(1)MySQL与mongo基本含义对比

MySQL           mongo          含义

database         database       数据库

table              collection       表/集合

column          field             字段/域

row               document     记录/文档(每一条信息称之为文档)

index            index            索引

(2)数据形式对比

MySQL数据(表)结构形式

---------------------------
id |   name    | age
---------------------------
1 |    Lily       | 10
---------------------------
2 |    Lucy     | 11
---------------------------

mongo数据结构(字典)

{
'_id':ObjectId("xxxxxxxxxxxxxxxxxxx"),
'name': 'Lily',
'age': 10
},
{
'_id':ObjectId("xxxxxxxxxxxxxxxxxxx"),
'name': 'Lucy',
'age': 11
}

3.5 创建数据库

创建数据库:use dbname(dbname为数据库名)

注:

(1)use为选择使用的数据库,如果数据库不存在,则插入数据时会自动创建该数据库

实例:

tarena@tedu:~$ mongo
MongoDB shell version:
connecting to: test
> use dbname
switched to db dbname
>
# use 并不是直接将数据库创建起来,主要还是选择这个数据,只有真正创建这个表时,才是真正创建这个数据库
> show dbs
admin (empty)
local .078GB
mongo_test .078GB
>
# 此时并没有显示dbname数据库,因里面并没有数据

(2)db(全局变量)表示当前正在使用的数据库,如果没有use选用目标数据库,则默认使用一个叫test的数据库

tarena@tedu:~$ mongo
MongoDB shell version:
connecting to: test
> db
test
> use dbname
switched to db dbname
> db
dbname

数据库的命名规则和特点

(1)数据库支持格式为utf-8

(2)数据库区分大小写,原则上都是小写;sql语句则不区分大小写

(3)命名也可以是utf-8格式,但不能是空字符串

(4)数据库名不能含有:空格、点、/ \ '\0'

(5)不能超过64字节

(6)数据库避免与诸如admin、local、config等数据库关键字冲突

注:admin(存储用户权限)、local(存储不想被分享复制的数据)、config(当分布式操作时才会出现,表示分片处理信息)

3.6 数据的备份与恢复

备份:

mongodump   -h   dbhost     -d   dbname   -o    dbdir
                               主机              数据库           文件夹

tarena@tedu:~$ mongodump -h 127.0.0.1 -d stu -o dbstudent
connected to: 127.0.0.1
: DATABASE: stu     to     dbstudent/stu...

查找是否已经备份成功

tarena@tedu:~$ ls
AID1709.csv  dbstudent                   PycharmProjects  视频  下载
anaconda3    examples.desktop            公共的           图片  音乐
core         java_error_in_PYCHARM_.log  模板             文档  桌面

tarena@tedu:~$ ls dbstudent/
stu

恢复数据

mongorestore  -h  dbhost    -d      dbname                                 <path>
                              主机               将数据回复到那个数据库        要恢复数据库文件夹

tarena -d student student/stu
connected
...

3.7 数据库删除

db.dropDatebase()

功能:删除当前数据库

3.8 数据库检测

tarena@tedu:~$ mongostat
connected to: 127.0.0.1
insert  query update delete getmore command flushes mapped  vsize    res faults  locked db idx miss %     qr|qw   ar|aw  netIn netOut  conn       time
                                         640m  .47g    35m        test:                62b     4k        ::
                                         640m  .47g    35m        test:                62b     4k        :: 

具体截图

备注:insert (每秒的插入次数) query(每秒的查询次数) update(更新次数) delete(删除次数 )

3.9 检测数据库的读写时长

mongotop  监测数据库的读写时长

tarena@tedu:~$ mongotop
connected to: 127.0.0.1

                            ns       total        :
        grid.system.namespaces         0ms         0ms         0ms
           grid.system.indexes         0ms         0ms         0ms
                 grid.fs.files         0ms         0ms         0ms
                grid.fs.chunks         0ms         0ms         0ms
       grade.system.namespaces         0ms         0ms         0ms
          grade.system.indexes         0ms         0ms         0ms
                   grade.class         0ms         0ms         0ms

截图显示

3.10 查看数据库

查看方式:show dbs

tarena@tedu:~$ mongo
MongoDB shell version:
connecting to: test
> show dbs
admin       (empty)
dbname      .078GB
local       .078GB
mongo_test  .078GB
> use stu
switched to db stu
> db.createCollection('class0')
{ "ok" :  }
> db.createCollection('class0')
{ "ok" : , "errmsg" : "collection already exists" }

4 集合

db.createCollection(collection_name)

功能:创建一个集合

参数:集合的名称

注:相当于 sql 语句中的表

4.1 集合的命名规则

(1)集合名不能以system 开头,它是系统集合保留的前缀

(2)集合名称不要和关键字重名,不要带有$

(3)集合名能含有 ‘\0'

(4)集合也是utf-8字符串

4.2 集合的创建

db.collection_name.insert()

collection_name:集合名

当插入数据时,如果集合不存在则会自动创建;此也意味着,若将集合名称写错时也会创建新的集合并插入数据

4.3 查看数据库中的集合

tarena@tedu:~$ mongo
MongoDB shell version:
connecting to: test
> show collections
class3
system.indexes
> show tables
class3
system.indexes
> 

show collections 和 show tables 可以达到相同效果

4.4 集合的创建(一)

db.createCollection(collection_name)

功能:创建一个集合

参数:集合的名称

命名规则:

(1)集合也是utf-8 字符串

(2)不能含有'\0',因为最终是用c++来解析的,当存在'\0'时,c++就会默认为这是结束的

(3)不能以system.开头,他是系统集合的保留前缀

(4)集合名称不要和关键字重名 ,不要带有$,mongdb中好多关键字是有$引入的,也即,集合名称不要额操作符重名

4.5 集合的创建(二)

db.collection_name.insert()

当插入数据时,集合不存在时则会自动创建

如果将集合名称写错时,也会创建新的集合并插入数据

4.6 删除一个集合

删除指定的集合:db.collecton_name.drop()

> show collections
abc
class0
class1
system.indexes
> db.abc.drop()
true
> show collections
class0
class1
system.indexes

4.7 集合的重命名

db.collection_name.renameCollection(new_name)

参数:新的集合名称

> show collections
class0
class1
system.indexes
> db.class1.renameCollection('cls')
{ "ok" :  }
> show collections
class0
cls
system.indexes
>

5 文档

在形式上类似于python中的字典,每个文档内部由 0个 或 多个 键值对构成,但文档不同于字典的是,文档是有序的。

bson:{'name':'licy','age':18}

键的命名规则:

(1)键值均为uft-8类型字符串,所以作为键时,加不加均可

,})
WriteResult({ "nInserted" :  })
> db.class0.find()
{ "_id" : ObjectId("5abf2fe426803c9f334a1019"), "name" : "李四", "age" :  }
>

(2)不能有‘\0',一般不会以点.和 $ 开头,也不使用下划线_开头

(3)键不能重复

文档中的值:

指的是mongo数据库支持的数据类型

mongo支持的数据类型:

字符串            utf-8字符串均为合法字符串

整型               32位 和64位

布尔类型        true false 或者1 0来表示也可以

浮点型           小数

Arrays            用来存储数组胡列表

Timestamp     时间戳,存储时间节点

Date              时间类型,年月日时分秒

Symbol          字符串类型 通常用来存储特殊字符

Null                null类型 表示空

object            文档类型(通常用于内部文件)

Binary data    二进制数据

code              代码 js

regex             正则表达式

ObjectId        系统自动生成的ID对象

在一个集合中文档的域不一定相同,也就是说键值对不一定完全相同

在一个文档中尽量选择意义相同的文档放入统一集合中

5.1 insert() 方法

db.collection.insert()

例如

,})
WriteResult({ "nInserted" :  })
> db.class0.find()
{ "_id" : ObjectId("5abf2fe426803c9f334a1019"), "name" : "李四", "age" :  }
>
ObjectId("5abf2fe426803c9f334a1019")

_id:是系统自动提供的主键,

5abf2fe4             26803c    9f33        4a1019     24位16进制

文档创建时间      机器ID     进程ID     计数器

插入多条文档

insert([{},{},{}])

db.class0.insert([{'name':'王五',age:18,sex:'女'},{name:'张三',age:19,sex:'女'}])

insert() 插入数据时,也可以采用_id 来自定义插入id值,但id值不能重复。

5.2 save() 方法

db.collection.save()

实例

db.class0.,name:,sex:'女'})

注:

(1)当插入键值对中没有_id 域时,同insert

(2)当插入键值对有_id值,则会将拟插入的_id值与已插入的_id值进行匹配,如果匹配到已经插入的值,则会对相应文档进行修改,如果没有匹配到则其功能相当于insert(),将会插入到数据库中

(3)save() 无法插入多条数据

5.3 find() 查找

db.collection.find(query, field)

功能:查找文档

参数:

query 查找条件 {name:'张三'}

field 显示的域  {_id:0}

返回值:返回查找到的文档(返回第一条,先进先出,查找的第一条,也即先输入的第一条)

field的值的表示方式:{field:0|1}

0:表示不显示该域

1:表示显示该域

注:

(1)若将某个域设置为1,则表示其他域均为0

(2)若将某个域设置为0,则表示其他域均为1

(3)不允许同时设置1和 0

(4)_id 永远默认为1,也可将其设置为0

5.4 findOne()查找

db.collection.findOne(query, field)

功能:只查找第一条符合查找条件的数据

参数:同find一样

返回值:返回第一条匹配到的文档

5.5 获取集合对象

db.getCollection('class0') ==  db.class0

6 条件查找

6.1 比较操作符

=  >   <   >=  <=  !=

$eq 等于

计算 age=20 的记录

db.class0.find({age:{$eq:}},{_id:})

$lt     小于
$lte   小于等于
$gt    大于
$gte  大于等于
$ne   不等于

例如:

db.class0.find({age:{$gte:,$lte:}},{_id:})

$in 包含

db.class0.find({age:{$})

$nin 不包含

db.class0.find({age:{$nin:})

6.2 逻辑操作符

and   or   not

$and  逻辑与

db.class0.find({$})

注:query 中逗号分割的多个条件默认就是and关系

$or  逻辑或

db.class0.find({$})

$not  逻辑非

db.class0.find({age:{$}}},{_id:})

$nor  既不是也不是

db.class0.find({$nor:})

6.3 混合查找

age    or  (namg = 张三  and  sex != 女)

db.class0.find({$})

db.class0.find({$})

python学习笔记——mongodb数据库的更多相关文章

  1. MongoDB学习笔记:MongoDB 数据库的命名、设计规范

    MongoDB学习笔记:MongoDB 数据库的命名.设计规范     第一部分,我们先说命名规范. 文档 设计约束 UTF-8 字符 不能包含 \0 字符(空字符),这个字符标识建的结尾 . 和 $ ...

  2. Python学习笔记020——数据库知识概述

    数据库概述 1 提供数据库的软件都有哪些 MySQL.SQL_Server.Oracle.DB2.Mariadb.MongoDB ... (1)是否开源 开源软件:MySQL.Mariadb.Mong ...

  3. Python学习笔记020——数据库基本操作

    本数据库的操作是Linux虚拟机平台下进行的 1 启动和链接MySQL服务 1.1 服务端 (1)查看服务状态 sudo /etc/init.d/mysql stauts (2)启动服务端 sudo ...

  4. Python学习笔记 使用数据库SQlite Mysql

    SQLite是一种嵌入式数据库,它的数据库就是一个文件.由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用当中, 甚至在IOS和Android的APP中都可以集成 Python就内 ...

  5. 10 python学习笔记-操作数据库(十)

    在功能.接口测试中,常常需要通过数据库的操作,来准备数据.检测环境及核对功能.接口的数据库操作是否正确. 在自动化测试中,就需要我们用代码连接数据库自动完成数据准备. 环境检查及数据库断言的功能.数据 ...

  6. Python学习笔记_Mysql数据库、Excel

    一.操作mysql数据库 import pymysql # 1.连上数据库:账号,密码,ip,端口号,数据库 # 2.建立游标(去数据库拿东西的工人) # 3.执行sql # 4.获取结果 # 5.关 ...

  7. Python学习笔记020——数据库中的数据类型

    1 数值类型 数值类型分为有符号signed和无符号unsigned两种. 1.1 整型 int (1)bigint 极大整型(8个字节) 范围 :-2**64 ~ 2**64 - 1 -922337 ...

  8. python学习笔记目录

    人生苦短,我学python学习笔记目录: week1 python入门week2 python基础week3 python进阶week4 python模块week5 python高阶week6 数据结 ...

  9. python学习笔记--Django入门四 管理站点--二

    接上一节  python学习笔记--Django入门四 管理站点 设置字段可选 编辑Book模块在email字段上加上blank=True,指定email字段为可选,代码如下: class Autho ...

随机推荐

  1. [11] 楔形体(Wedge)图形的生成算法

    顶点数据的生成 bool YfBuildWedgeVertices ( Yreal width, Yreal length, Yreal height, YeOriginPose originPose ...

  2. hdu3117之矩阵快速幂

    Fibonacci Numbers Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

  3. Windows10下安装pytorch并导入pycharm

    1.安装Anaconda 下载:https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/ 安装Anaconda3,最新版本的就可以了,我安装的是5. ...

  4. COM结构化存储中存储对象或者流对象的命名规则

      COM结构化存储中存储对象或者流对象的命名规则

  5. C++ Linux 多线程之创建、管理线程

    线程就是,在同一程序同一时间内同意运行不同函数的离散处理队列. 这使得一个长时间去进行某种特殊运算的函数在运行时不阻碍其它的函数变得十分重要. 线程实际上同意同一时候运行两种函数,而这两个函数不必相互 ...

  6. Discuz常见小问题-如何修改favourite图标

    1做好一个ico图标之后,直接替换目录下的对应文件即可, 如果没效果刷新浏览器或更新后台CSS缓存.

  7. Discuz常见大问题-如何在自定义页面使用首页四格

    根据要求把majianjun文件夹放到指定目录 在DIY模式下点击保存后面的小按钮,然后导入XML文件 默认是采集所有版块的数据,你可以保存之后再次DIY,然后设置数据来源和设置标题等信息. 需要注意 ...

  8. 跨站点脚本编制-XSS 描述及解决方法

    跨站点脚本编制可能是一个危险的安全性问题,在设计安全的基于 Web 的应用程序时应该考虑这一点.本文中,描述了这种问题的本质.它是如何起作用的,并概述了一些推荐的修正策略. 当今的大多数网站都对 We ...

  9. STL与多线程+写时拷贝

    http://blog.csdn.net/liuxuejiang158blog/article/details/13251379 STL并不是线程安全的,当多个线程同时读取STL时没什么问题.当多个线 ...

  10. uni-app 为何package.json配置以后不会生成文件?

    和微信小程序不同的是uni-app 配置步骤如下 小程序是新建json生成文件夹\文件 uni-app是新建文件生成json