Mongodb--day01

本文是MongoDB的初学者指南,主要介绍了MongoDB的基本概念、安装过程和首次使用体验。通过这篇教程,读者将了解到NoSQL数据库的优势,并掌握如何在本地环境中启动和操作MongoDB。
摘要由CSDN通过智能技术生成
MongoDB(芒果数据库)

数据存储阶段

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

    优点:数据便于长期保存
        数据可以大量存储
        使用简单

    缺点:数据的存储结构比较随意
         数据的查找修改效率低
         不方便扩展和程序调用

数据库管理阶段

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

几个概念:
    数据:能够输入到计算机中并被识别处理的信息集合

    数据结构:研究一个数据集合中,数据之间关系的学科

    数据库:按照数据结构,存储管理数据的仓库,数据库是在数据库管理系统管理和
          控制下在一定介质上存储的数据集合
    
    数据库管理系统:数据库管理软件,用于维护建立数据库

    数据库系统:由数据库和数据库管理系统等开发工具组成的集合


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

        e.g.    Oracle  DB2     SQLServer      Mysql    Sqlite

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


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

    优点:并发能力强,读写速度快,可以更好的应对海量数据并发需求
    普遍比较灵活,容易拓展,弱化了数据的一致性

    缺点:通用性差,没有像sql那样一致的语句操作
         灵活性强会导致一定的操作混乱
         技术成熟比关系型数据库要差
        
    
    NoSql 使用情况
        1.对数据一致性要求较低
        2.应对数据高并发存储的可能性较大
        3.比较容易建立非关系型数据库模型

NoSql 分类
    键值型数据库:Redis
    列存储数据库:HBase
    文档型数据库:MongoDB
    图形数据库


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

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

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

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

        环境变量:
            PATH = $PATH:/opt/mongodb/bin 
            export PATH
        
        如果不想每次启动都执行,将以上两句写入主目录
        .bashrc中

mongodb 命令:
    1.设置数据库的存储位置: mongod --dbpath 目录

    e.g.    将database 设置为数据库存储目录
    mongod --dbpath database

设置数据库连接端口:
    mongod --port port
    *如果不设置默认端口为 270017

启动mongodb操作界面(mongo shell) :mongo

    退出该界面 ctrl-c 或者quit()

mongodb数据库结构
    键值对 -->> 文档 -->> 集合 -->> 数据库

-----------------------------
|    ID  |   NAME    |  AGE |
-----------------------------
|   1    |   Lily    |u
-----------------------------
|   2    |   Lucy    |  17  |
-----------------------------
{'_id':1,'NAME':'Lily',"AGE":18},{'_id':2,'NAME':'LUCy',"AGE":17}

Mysql           mongodb         含义
--------------------------------------
database        database        数据库

table           collection      表/集合

column          field           字段/域

row             document        记录

index           index           索引

创建数据库

    use database    
        e.g. 创建一个叫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
            备份本机中stu数据库到当前目录
                mongodump -h 127.0.0.1 -d stu -o .

            数据库文件恢复: mongorestore -h dbhost:port -d dbname path 
            
            e.g.            获取数据    到本机               student数据库中  从stu
                          mongorestore -h 127.0.0.1:27017 -d students     ./stu

数据库监控命令

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

mongotop    :检测内个数据库中数据表的读写情况
     ns     :数据集合
     total  :总时长
     read   :读时长
     write  :写时长

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

        e.g. 创建集合class1
            db.createCollection('class1')

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

            e.g.    插入数据时class2不存在自动创建这个集合
               db.class2.insert({'name':'王八蛋','age':35,'sex':'m'})

查看数据库中集合 : show collections
                 show tables

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

删除集合:
    db.collection.drop()

    e.g.  删除数据库中class集合
            db.class.drop()

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

    将集合class重命名为class0
        db.class.renameCollction('class0')

文档:
    1.文档是mongodb数据库中基本的数据组成形式类似字典
    2.文档由键值对构成,每个键值对表达一个数据项
    3.mongodb文档属于bson类型数据
    4.文档中的键值对是有序的

键:即文档的域,表达值是什么内容
    键的命名规则
        1.使用utf-8字符串
        2.不能使用\0
        3.一个文档中的键不能重复

值:即数据库存储的数据

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


    ObjectID类型
       "_id" : ObjectId("5bd13b9e842ebe76eb092645")
        _id:    当插入mongodb文档时会自动生成_id域作为主键id
        值 :    ObjectID数据,为了和其他的值不重复
                24位16进制编码
                8位文档创建时间     6位机器ID       4位进程id      6位计数器
    
    集合中的文档
        1.每个集合中的文档格式可以不同
        2.一个集合中存储的数据尽量体现相同的内容
        3.文档的表达尽量层次不要太多

插入文档
    插入单个文档:   db.collection,insertOne()
        功能:插入一条文档
        参数:要插入的文档
        
            向class0中插入一条文档        
            db.class0.insertOne({'name':'Lucy','age':17,'sex':'w'})

        1.db.class.find() 查看插入结果
        2.数据操作时,键可以不加引号
        3.可以自己添加_id域,但是_id域的值不能重复
        4.一个集合中插入的文档是有序的,
    
    插入多条文档: db.collection.insertMany([{},{},{}...])
            功能:插入多个文档
            参数:数组中包含多个文档
        
        向class2中插入多个文档
        db.class2.insertMany([{name:'王八蛋',age:28,sex:'w'},{name:'张无忌',age:18,sex:'m'}])

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

                db.class0.insert([{name:'猴子',age:55,sex:'w'},{name:'萧熏儿',age:18,sex:'w'}])

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

            db.class1.save([{name:"古灵冷火",age:18,sex:'m'},{name:'青莲地心火火',age:20,sex:'w'}])
        如果要插入的文档_id已经存在则会替换掉原有文档内容

获取集合对象
    db.getCollection(collection_name)
    功能:获取到集合对象,等同于db.collection

    e.g.
    db.getCollection('class0')  <<===>>     db.class0

查找操作
    mysql: select ... from table where...

    mongo: db.collection.find(query,field)

查找集合中所有内容: 
    db.collection.find()-->    select * from table

    find(query,field)
        功能:查找所有符合条件的文档
        参数:query : 表示筛选条件,是一个键值对文档,默认表示查找所有内容
        e.g.    筛选所有年龄为17的文档
                db.class1.find({age:17})
            field :表示查找的域,是一个键值对文档,用0表示不查找某个域,1表示查找某个域

            db.class0.find({},sex:0) --->> 不查找sex域
            db.class0.find({},name:1,age:1) --->> 查找name,age域

            不查找_id域,只查找name域内容
            db.class0.find({},{_id:0,name:1})

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

    findOne(query,field)
    功能:查找第一条符合条件的文档
    参数:使用同find
        db.class0.findOne({age:17}.{_id:0})

    作业:1.总结关系型数据库和非关系型数据库的区别
        2.复习数据库创建,集合操作,数据插入方法
                                                                                                     
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值