跳转至

2. 基本概念

MongoDB的安装

  1. 自动安装
    sudo apt-get intsall mongodb
    
    默认安装位置
        /var/lib/mongodb
    配置文件位置
        /etc/mongodb.conf
    命令集
        /usr/bin
        /usr/local/bin
    
  2. 手动安装

    1. 下载安装包 https://www.mongodb.com/
    2. 解压安装包 /usr/local 或 /opt
    3. 将解压后的mongodb文件夹中的bin目录添加到环境变量中 PATH=$PATH:/opt/mong.../bin
      export PATH
      将以上两个写入启动脚本 /etc/rc.local
    4. 重启

MongoDB命令

  • 设置数据库存储位置

    mongod --dbpath 目录
    
    示例
        将路径设置为dbs
        mongo --dbpath dbs
    

  • 设置数据库监听端口

    mongod --port 8080
    * 默认监听端口27017
    

  • 进入数据库交互操作界面

    mongo shell
    用来操作mongodb数据库的界面,在这里可以使用mongo语句操作数据库内容
    

MongoDB中的组织结构

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

MySql 和 MongoDB 概念对比

MySql        MongoDB        含义
database     database       数据库
table        collection     表/集合
column       field          字段/域
row          document       记录/文档
index        index          索引

数据库的备份和恢复

  1. 备份

    mongodump -h host -d dbname -o bak
    例如
        mongodump -h 127.0.0.1 -d test -o bak
    

  2. 恢复

    mongorestore -h dbhost:port -d dbname path
    例如
        将test数据库恢复到本机的res数据库中(不存在则自动创建)
        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 写时间

创建数据库

  • use databaseName
    例如:创建一个名字为stu的数据库
    use stu

    • use 实际为选择使用哪个数据库,当数据库不存在时则会自动创建
    • use 后并不会立即创建出数据库,而是需要等到插入数据时数据库才会创建
  • show dbs
    查看系统中的数据库

  • 系统数据库说明

    • admin: 存储用户系统
    • local: 存储本地数据
    • config: 存储分片信息
  • 数据库的命名规则

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

db

  • mongodb的全局量, 代表当前正在使用的数据库
  • 如果不选择使用任何数据库db代表test,直接插入数据就会建立test数据库

删除数据库

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

集合

创建集合

方法1
 db.createCollection(collection_name)
    例如
        创建class1集合
        db.createCollection(class1)

方法2
    当向一个集合中插入数据的时候,如果集合不存在则自动创建
    db.collection_name.insert(...)
集合命名规则

  1. 合法的utf-8字符
  2. 不能有\0
  3. 不能以system.开头,因为这个系统保留集合前缀
  4. 不能和关键字重名
集合创建原则
  1. 集合中的文档要描述同一类事物
  2. 数据库中统一类数据尽量集中存放在相同的集合
  3. 集合中文档嵌套层数不要太多

查看数据库中集合

show collections

删除集合

db.collection_name.drop()

集合的重命名

db.collection_name.renameCollection('new_name')

文档

mongodb中数据的组织形式 ---> 文档

mongodb文档: 是以键值对的形式组成的一组数据,类似python中字典描述数据的方式

键: 即表示文档的域,表达了一个键值对的含义

命名规则

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

值: 即数据库文档存储的数据.

文档中键值对是有序的,文档中键值对严格区分大小写
bson ---> json ---> Javascript

集合中的文档

  1. 集合中的文档不一定有相同的域

    • 个数不同
    • 域不相同
    • 数据类型不同
  2. 集合中的文档各自比较独立,相互并不影响

插入文档

  1. db.collection_name.insert()

    功能: 插入一个文档
    参数: 要插入的文档
    例如: 插入单个文档

    db.collection_name.insert({'name': 'Lucy', 'age':18, 'sex': 'w'})
    

    • 插入操作中键可以不加引号
    • 查看插入结果db.collection_name.find()
    • _id值可以自己插入,但是不能重复

    插入多条文档

    db.collection_name.insert([{}, {}, {}])
    
    2. 其他插入方法

    • db.collection_name.insertOne({}) 插入一条记录
    • db.collection_name.insertMany([{}, {}]) # 插入多条记录
    • save插入文档
      db.collection_name.save()
      1. 如果正常插入和insert 用法相同
      2. 如果插入数据时是由_id域,且_id域存在时则会修改原有文档,如果该值不存在则正常插入

支持的类型

类型              值

整型              整数 1 2 3
布尔类型           true false
浮点型             小数
Array             数组
Date              时间日期
Timestamp         时间戳
String            字符串
Symbol            特殊字符串
Binary data       二进制字串
Null              null空值
Object            内部文档(对象)
ObjectId          自动生成ID标记
regex             正则字串
code              js代码


"_id" : ObjectId("5ba076bfcb98b3cae2e289db")
_id: 当mongodb插入文档时如果不指定_id域则自动生成_id域.值如果不自己
     指定即会自动生成一个ObjectId值

5ba076bfcb98b3cae2e289db
24位,使用ObjectId经过算法处理保证其唯一性
8位  文档创建时间
6位    机器ID
4位  进程id
6位  计数器

获取集合对象方法

db.collection_name ---> db.getCollection('collection_name')