0405-MongoDB

作者: 大Fy | 来源:发表于2017-04-07 09:56 被阅读0次

    MongoDB旨在为web应用提供可扩展的高性能数据存储方案

    MongoDB将数据存储为一个文档,数据结构由键值对(key=>value)组成,类似json对象,字段值可以包含其他文档、数组、文档数组

    MongoDB文档


    安装mongodb

    MongoDB-OSX官方下载

    # 进入 

    /usr/localcd/usr/local


    # 下载

    sudo curl-O https://fastdl.mongodb.org/osx/mongodb-osx-x86_64-3.4.2.tgz


    # 解压

    sudo tar-zxvf mongodb-osx-x86_64-3.4.2.tgz


    # 重命名为 mongodb 目录

    sudo mv mongodb-osx-x86_64-3.4.2mongodb


    安装完成后,我们可以把 MongoDB 的二进制命令文件目录(安装目录/bin)添加到 PATH 路径中:

    exportPATH=/usr/local/mongodb/bin:$PATH


    运行配置 MongoDB

    # 首先创建一个数据库存储目录 /data/db:

    sudo mkdir-p/data/db


    # 启动 mongodb,默认数据库目录即为 /data/db:

    sudo mongod


    #创建文件,进入mongodb目录

    cd /usr/local/mongodb

    mkdir data

    mkdir logs

    两个文件夹,分别是存储数据库数据和日志文件的

    # 然后

    sudo vim mongodb.conf

    其中conf文件内容为:

    port=27017

    dbpath=/usr/local/mongodb/data

    logpath=/usr/local/mongodb/logs/mongodb.log

    logappend=true

    第一个是配置的是mongodb的启动端口,然后dbpath是指数据的存储路径,logpath是指日志存储路径,logappend是指日志是否以追加方式添加结束编辑按 esc

    然后 :wq    保存退出

    # 调用mongod命令,-f 是以配置文件形式启动,后面指定的是配置文件所在的位置

    sudo /usr/local/mongodb/bin/mongod  -f /usr/local/mongodb/mongdb.conf

    # 输入命令 ,telnet ip地址 端口号,测试能不能连接某个ip地址的端口,如果能连接,证明这个端口已经开了,也就是你的应用程序已经运行了

    telnet 127.0.0.1 27017

    **还有个方式,输入  ps -ef|grep mongodb


    启动MongoDB

    在 MongoDB 安装目录的 bin 目录下执行mongod即可。


    MongoDB可视化工具的使用

    # 下载

    mac-mongodb可视化工具

    # 打开

    #设置


    文档

    文档是一个键值(key-value)对(即BSON)。MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,

    **需要注意的是:

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

    -文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型(甚至可以是整个嵌入的文档)。

    -MongoDB区分类型和大小写。

    -MongoDB的文档不能有重复的键。

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

    **文档键命名规范:

    -键不能含有\0 (空字符)。这个字符用来表示键的结尾。

    -.和$有特别的意义,只有在特定环境下才能使用。

    -以下划线"_"开头的键是保留的(不是严格要求的)。


    什么是集合

    就是数据库表

    没有固定结构

    对集合可以插入不同格式和类型的数据,但通常情况下插入集合的数据都会有一定的关联性。

    当第一个文档插入时,集合就会被创建。


    capped collections

    Capped collections 就是固定大小的collection。

    它有很高的性能以及队列过期的特性(过期按照插入的顺序). 有点和 "RRD" 概念类似。

    Capped collections是高性能自动的维护对象的插入顺序。它非常适合类似记录日志的功能 和标准的collection不同,你必须要显式的创建一个capped collection, 指定一个collection的大小,单位是字节。collection的数据存储空间值提前分配的。

    要注意的是指定的存储大小包含了数据库的头信息。

    db.createCollection("mycoll",{capped:true,size:100000})


    MongoDB数据类型


    Mongodb基本命令的使用

    数据库

    # 启动数据库

      ./mongo


    # 查看所有数据库

       show dbs


    # 删除数据库

       db.dropDatabase()


    # 显示当前数据库对象或集合

       show db


    # 运行"use"命令,可以连接到一个指定的数据库,如果数据库不存在,则创建数据库

       use local

    有一些数据库名是保留的,可以直接访问这些有特殊作用的数据库。

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

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

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


    文档

    # 刚创建的数据库并不在数据库的列表中, 要显示它,我们需要向该数据库插入一些数据。

    # 插入文档,COLLECTION_NAME是集合名,如果该集合不在该数据库中, MongoDB 会自动创建该集合并插入文档。

       db.COLLECTION_NAME.insert(document)  /db.COLLECTION_NAME.save(document)


    # 查看文档

      db.COLLECTION_NAME.find()


    # 格式化返回结果查看文档

      db.COLLECTION_NAME.find().pretty()


    # 只返回一个文档

        findOne()


    # 也可以将数据直接定义成变量再插入

       document=({xx:'xx',yy:'yy'});

       db.COLLECTION_NAME.insert(document)


    # 查看集合

        show tables


    #  删除集合

        db.COLLECTION_NAME.drop()


    # 更新文档

        ## update() 方法用于更新已存在的文档

    参数说明:

    query: update的查询条件,类似sql update查询内where后面的。

    update: update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的

    upsert: 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。

    multi: 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。

    writeConcern:可选,抛出异常的级别。

      ## save() 方法通过传入的文档来替换已有文档

    参数说明:

    document: 文档数据。

    writeConcern:可选,抛出异常的级别。


    # remove()函数是用来移除集合中的数据

    参数说明:

    query:(可选)删除的文档的条件。

    justOne: (可选)如果设为 true 或 1,则只删除一个文档。

    writeConcern:(可选)抛出异常的级别。

    # 删除所有数据

      db.COLLECTION_NAME.remove({})


    MongoDB 与 RDBMS Where 语句比较


    MongoDB AND 条件

    db.COLLECTION_NAME.find({key1:value1,key2:value2}).pretty()


    MongoDB OR 条件

    db.COLLECTION_NAME.find({$or:[{key1:value1},{key2:value2}]}).pretty()


    AND 和 OR 联合使用

    类似常规 SQL 语句为:'where likes>50 AND (by = '菜鸟教程' OR title = 'MongoDB 教程')'


    MongoDB条件操作符

    (>) 大于 - $gt

    (<) 小于 - $lt

    (>=) 大于等于 - $gte

    (<= ) 小于等于 - $lte


    MongoDB$type操作符

    $type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果。

    db.COLLECTION_NAME.find({"条件":{$type:类型数字}})


    MongoDB Limit() 方法

    limit()方法接受一个数字参数,该参数指定从MongoDB中读取的记录条数。

    db.COLLECTION_NAME.find(“条件”).limit(记录条数)


    MongoDB Skip() 方法

    skip()方法来跳过指定数量的数据,skip方法同样接受一个数字参数作为跳过的记录条数。

    db.COLLECTION_NAME.find().skip(NUMBER)


    MongoDB sort()方法

    sort()方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而-1是用于降序排列。

    db.COLLECTION_NAME.find().sort({KEY:1/-1})


    MongoDB 索引

    索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构

    db.COLLECTION_NAME.ensureIndex({KEY:1})

    Key 值为要创建的索引字段,1为指定按升序创建索引,降序为-1,也可以设置使用多个字段创建索引(关系型数据库中称作复合索引)

    ensureIndex() 接收可选参数,可选参数列表如下:


    MongoDB 聚合

    主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。有点类似sql语句中的 count(*)。

    db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)

    聚合框架中常用的几个管道操作符:

    $project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。

    $match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。

    $limit:用来限制MongoDB聚合管道返回的文档数。

    $skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。

    $unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。

    $group:将集合中的文档分组,可用于统计结果。

    $sort:将输入文档排序后输出。

    $geoNear:输出接近某一地理位置的有序文档。


    Node.js 连接 MongoDB

    # 安装驱动

      npm install mongodb


    # 插入数据


    # 查询数据


    # 更新数据


    # 删除数据

    mongoose模块的使用

    相关文章

      网友评论

        本文标题:0405-MongoDB

        本文链接:https://www.haomeiwen.com/subject/nitxattx.html