• MongoDB基础


    MongoDB

    5.1 什么是MongoDB

    MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

     

    5.2 MongoDB优缺点

     优点: 1. MongoDB 是一个面向文档存储的数据库,操作起来比较简单和容易;

    2.内置GridFS,支持大容量的存储;

    3. 可以在MongoDB记录中设置任何属性的索引;

    4. MongoDB支持各种编程语言:RUBYPYTHONJAVAC++PHPC#等多种语言;

    5.安装简单;

    6.复制(复制集)和支持自动故障恢复;

    7. MapReduce 支持复杂聚合。

    缺点: 1.不支持事务;

    2.占用空间过大;

    3.不能进行表关联;

    4.复杂聚合操作通过MapReduce创建,速度慢;

    5. MongoDB 在你删除记录后不会在文件系统回收空间。除非你删掉数据库。

    5.3 基础概念解析

    SQL术语/概念

    MongoDB术语/概念

    解释/说明

    database

    database

    数据库

    table

    collection

    数据库表/集合

    row

    document

    数据记录行/文档

    column

    field

    数据字段/

    index

    index

    索引

    table joins

     不支持

    表连接,MongoDB不支持

    primary key

    primary key

    主键,MongoDB自动将_id字段设置为主键

    通过下图实例,我们也可以更直观的了解Mongo中的一些概念:

     

    5.4 安装

    5.4.1 下载地址

    https://www.mongodb.com/download-center#community

    5.4.2 安装

    1)上传压缩包到虚拟机中

    [jason@hadoop102 software]$ ls
    
    mongodb-linux-x86_64-4.0.10.tgz

    2)解压

    [jason@hadoop102 software]$ tar -zxvf mongodb-linux-x86_64-4.0.10.tgz -C /opt/module/

    3)重命名

    [jason@hadoop102 module]$ mv mongodb-linux-x86_64-4.0.10/ mongodb

    4)创建数据库目录

    MongoDB的数据存储在data目录的db目录下,但是这个目录在安装过程不会自动创建,所以需要手动创建data目录,并在data目录中创建db目录。

    [jason@hadoop102 module]$ sudo mkdir -p /data/db
    
    [jason@hadoop102 mongodb]$ sudo chmod 777 -R /data/db/

    5)启动MongoDB服务

    [jason@hadoop102 mongodb]$ bin/mongod

    6)进入shell页面

    [jason@hadoop102 ~]$ cd /opt/module/mongodb/
    
    [jason@hadoop102 mongodb]$ bin/mongo
    
     
    
    MongoDB shell version v4.0.10
    
    connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb
    
    Implicit session: session { "id" : UUID("66e2b331-e3c3-4b81-b676-1ee4bac87abf") }
    
    MongoDB server version: 4.0.10
    
    Welcome to the MongoDB shell.
    
    …………..
    
    >

    5.5 基础概念详解

    5.5.1 数据库

    一个mongodb中可以建立多个数据库。MongoDB的默认数据库为"db",该数据库存储在data目录中。MongoDB的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。

    1)显示所有数据库

    > show dbs
    
    admin   0.000GB
    
    config  0.000GB
    
    local   0.000GB

    admin:从权限的角度来看,这是"root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。

    local:这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合

    config:当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。

    2)显示当前使用的数据库

    > db
    
    test

    3)切换数据库

    > use local
    
    switched to db local
    
    > db
    
    local

    5.5.2 文档(Document)

    文档是一组键值(key-value)对组成。MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 非常突出的特点。

    一个简单的例子:

    {"name":"jason"}

    注意:

    1.文档中的键/值对是有序的。

    2.MongoDB区分类型和大小写。

    3.MongoDB的文档不能有重复的键。

    4.文档的键是字符串。除了少数例外情况,键可以使用任意UTF-8字符。

    5.5.3 集合

    集合就是 MongoDB 文档组,类似于MySQL中的table

    集合存在于数据库中,集合没有固定的结构,这意味着你在对集合可以插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的关联性。

    下面我们来看看如何创建集合:

    MongoDB 中使用 createCollection() 方法来创建集合。

    语法格式:

    db.createCollection(name, options)

    参数说明:

    name: 要创建的集合名称

    options: 可选参数, 指定有关内存大小及索引的选项

    options 可以是如下参数:

    字段

    类型

    描述

    capped

    布尔

    (可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。
    当该值为 true 时,必须指定 size 参数。

    autoIndexId

    布尔

    (可选)如为 true,自动在 _id 字段创建索引。默认为 false

    size

    数值

    (可选)为固定集合指定一个最大值(以字节计)。
    如果 capped true,也需要指定该字段。

    max

    数值

    (可选)指定固定集合中包含文档的最大数量。

    案例1:在test库中创建一个jason的集合

    > use test
    
    switched to db test
    
    > db.createCollection("jason")
    
    { "ok" : 1 }
    
    > show collections
    
    jason
    
     
    
    //插入数据
    
    > db.jason.insert({"name":"jason","url":"www.jason.com"})
    
    WriteResult({ "nInserted" : 1 })
    
    //查看数据
    
    > db.jason.find()
    
    { "_id" : ObjectId("5d0314ceecb77ee2fb2d7566"), "name" : "jason", "url" : "www.jason.com" }

    说明:

    ObjectId 类似唯一主键,可以很快的去生成和排序,包含 12 bytes,含义是:

    4 个字节表示创建 unix 时间戳

    接下来的 3 个字节是机器标识码

    紧接的两个字节由进程 id 组成 PID

    最后三个字节是随机数

    案例2:创建一个固定集合mycol

    > db.createCollection("mycol",{ capped : true,autoIndexId : true,size : 6142800, max : 1000})
    
    > show tables;
    
    jason
    
    mycol

    案例3:自动创建集合

    MongoDB 中,你不需要创建集合。当你插入一些文档时,MongoDB 会自动创建集合。

    > db.mycol2.insert({"name":"jason"})
    
    WriteResult({ "nInserted" : 1 })
    
    > show collections
    
    jason
    
    mycol
    
    mycol2

    案例4:删除集合

    > db.mycol2.drop()
    
    True
    
    > show tables;
    
    jason
    
    mycol
  • 相关阅读:
    css sprite的实现
    python的range()函数使用方法
    Codeforces Round #260 (Div. 1) 455 A. Boredom (DP)
    n个整数全排列的递归实现(C++)
    AngularJS进阶(三十一)AngularJS项目开发技巧之获取模态对话框中的组件ID
    Swift扩展(Extension)
    leetcode 88 Merge Sorted Array
    Unity3D摄像机尾随人物
    mybatis 高级映射和spring整合之与Spring整合(6)
    mybatis 高级映射和spring整合之查询缓存(5)
  • 原文地址:https://www.cnblogs.com/LIAOBO/p/13640416.html
Copyright © 2020-2023  润新知