• Mongodb安装使用


    一、特点介绍(占用磁盘空间大):

    mongodb是文档型数据库,存储的是文档(Bson->json的二进制化),特点:内部执行引擎为js解释器,把文档存储成bson结构,查询时转换为js对象并通过熟悉的js语法来操作。

    二、mongodb的下载安装

      a) 下载地址:https://www.mongodb.com/try/download/community

      b) 下载: wget https://fastdl.mongodb.org/osx/mongodb-macos-x86_64-4.2.8.tgz

      c) 解压: tar -zxvf  mongodb-macos-x86_64-4.2.8.tgz

      d) 移动:mv mongodb-macos-x86_64-4.2.8 /usr/local/mongodb

      e) 切换到程序目录: cd /usr/local/mongodb

      f) 建立目录:mkdir -p ./database  ./log

      g) 启动服务:sudo ./bin/mongod --dbpath ./database/ --logpath ./log/default.log --fork --port 27017

      参数解释:

            --dbpath:数据库存储目录

          --logpath:日志存储目录

          --port:运行端口(默认 27017

          --fork:后台进程运行

      h) 连接mongo客户端: ./bin/mongo

    三、mongo库表操作语句(user为表名)

      a) 查看所有数据库:show dbs; show databases;

      b) 选库(或创建库):use databaseName;

      c) 查看表:show tables; show collections;

      d) 查看操作命令:db.help();

      e) 创建表:db.createCollection('user');

      f) 新增一行:db.user.insert({name:'test',age:22});

      g) 新增多行:db.user.insert( [{name:'test',age:22},{name:'xiali',age:2}] );

      h) ID查表数据:db.user.find(‘id’);

      i) 删除表:db.user.drop();

      j) 删除数据库:db.dropDatabase();

      k) 删除数据:db.user.remove(查询表达式,选项);

      l) 替换文档:db.user.update({name:'tset'},{name:'daming'});

      m) 更新:db.user.update({name:'test'},{$set:{name:'aliang'}},{multi:true});

        i. $set:修改某列的值

        ii. $unset:删除某一列

        iii. $reset:重命名某一列

        iv. $incr:自增某列的值

        v. 选项{multi:true}可作用于多行,默认一行

        vi. 选项{upsert:true}如果查询存在则更新,否则新增

        vii. $setOnInsert:当upsert的时候,补充新增字段

      n) 查表数据:db.user.find(查询表达式,查询列);

      o) 关闭服务器:db.shutdownServer();

    四、查询表达式

      a) $ne不等于:db.user.find( {name:{$ne:'test'}} );

      b) $gt 大于:db.user.find( {age:{$gt:1}} );

      c) $lt 小于:db.user.find( {age:{$lt:1}} );

      d) $gte 大于等于:db.user.find( {age:{$gte:1}} );

      e) $lte 小于等于:db.user.find( {age:{$lte:1}} );

      f) $nin 不在范围内:db.user.find( {age:{$nin:[1,9]}} );

      g) $in 在范围内:db.user.find( {age:{$in:[1,9]}} )

      h) $all 匹配所有:db.user.find( {age:{$all:[2,22]}} );

      i) $ordb.user.find( {$or:[{name:{$ne:'test'}},{age:{$gt:5}}]} );

      j) $anddb.user.find( {$and:[{name:{$ne:'test'}},{age:{$gt:5}}]} );

      k) $not 取反:db.user.find( {age:{$not:{$gt:1}}} );

      l) $nor 都不成功则为真:db.user.find({$nor:[{name:'test'},{age:{$gt:30}}]});

      m) $exists 某列存在则为真:db.user.find( {age:{$exists:true}} );

      n) $mod满足求余条件则为真:db.user.find( {age:{$mod:[3,2]}} ); //32

      o) $type数据为某类型则为真:db.user.find( {age:{$type:'number'}} );

      p) $where 条件查询:db.user.find( {$where: 'this.age>2 && this.name == "test"' } );  //不建议使用,须把二进制数据转成js对象格式再查询,效率低

      q) $regex 正则:db.user.find( {name:{$regex:/test/}} );  // 不建议使用,效率低

      r) 查询遍历:db.user.find().forEach( function(obj){printjson(obj)} );

      s) 分页查询:db.user.find().skip(2).limit(3);

      t) 排序:db.user.find().sort( {name:1,age:-1} );

      u) 统计: db.user.find().count();

    五、索引

      a) 查看查询分析:db.user.find().explain();

      b) 查看当前索引:db.user.getIndexes();

      c) 创建单列索引:db.user.ensureIndex({field:1/-1});  // 1为正序,-1为倒序

      d) 创建多列索引:db.user.ensureIndex({field1:1/-1,field2:1/-1});

      e) 创建子文档索引:db.user.ensureIndex({field.subfield:1/-1});

      f) 创建唯一索引:db.user.ensureIndex({field.subfield:1/-1},{unique:true});

      g) 删除索引:db.user.dropIndex({field:1/-1});

      h) 删除所有索引:db.user.dropIndexes();

    六、用户管理

      a) 切换admin数据库:use admin;

      b) 添加:db.createUser({user:'用户名',pwd:'密码',roles:[{role:'read',db:'admin'}]});

        i. read允许用户读取指定数据库

        ii. readWrite:允许读写数据库

        iii. dbAdmin:允许执行管理函数,如索引创建、删除,查看统计等

        iv. userAdmin:允许创建、删除和管理用户

        v. clusterAdmin:只在admin数据库可用,赋予用户所有分片和复制集中相关函数的管理权限。

        vi. readAnyDatabase:只在admin数据库可用,赋予用户所有数据库的读权限。

        vii. readWriteAnyDatabase:只在admin数据库可用,赋予用户所有数据库读写权限。

        viii. root:只在admin数据库可用,超级账号,超级权限。

      c) 删除:db.dropUser(用户名);

      d) 更新密码:db.changeUserPassword("用户名","新密码")

      e) 更新密码二:db.updateUser("用户名",{"pwd":"新密码"})

      f) 更新角色:db.updateUser('用户名',{roles:[{role:'角色名称',db:'数据库名}]});

      g) 用户验证:db.auth('用户名','密码');

    七、mongodb备份和恢复

      a) 导出:mongoexport -h host -p port -u username -p password

        i. -d database:要导出的数据库

        ii. -c collection:到导出的表

        iii. -f field:要导出的列

        iv. -q:查询条件(用引号包起来)

        v. -o:导出文件名

        vi. --csv:导出csv格式

      b) 导入:mongoImport

        i. -d database:待导入的数据库

        ii. -c collection:待导入的表

        iii. --type:文件类型,默认:csvjson

        iv. --file:备份文件路径

      c) 二进制导出:mongodump

        i. -d database:库名

        ii. -c collectino:表名

        iii. -f fieldsfield1,field2...列名

      d) 二进制导入:mongorestore

        i. -d database:库名

        ii. --directoryperdb 备份目录

    八、replication复制集

      a) 建立复制集目录: mkdir -p ./database0 ./database1 ./database2 ./log

      b) 启动1服务(复制集 repl )sudo ./bin/mongod --dbpath ./database0 --logpath ./log/default0.log --fork --port 27017 --replSet repl --smallfiles

      c) 启动2服务(复制集 repl )sudo ./bin/mongod --dbpath ./database1 --logpath ./log/default1.log --fork --port 27018 --replSet repl --smallfiles

      d) 启动3服务(复制集 repl )sudo ./bin/mongod --dbpath ./database2 --logpath ./log/default2.log --fork --port 27019 --replSet repl --smallfiles

      e) 声明配置变量:

        var rsconf = {

          _id: 'repl',

          members:[

          {

            _id:0,

            host: '127.0.0.1:27017'

          },

          {

            _id:1,

            host: '127.0.0.1:27018'

          },

          {

            _id:2,

            host: '127.0.0.1:27019'

          }]

        }

      f) 根据配置初始化:rs.initiate(rsconf);

      g) 查看状态:rs.status();

      h) 添加节点:rs.add('127.0.0.1:27019');

      i) 删除节点:rs.remove('127.0.0.1:27019');

      j) 允许slave读写:re.slaveok();  // 默认不许读写;

    九、shard分片

    十、聚集运算

      a) 分组统计(不支持shardcluster):db.collection.group({

        key: {key1:1,key2:2},

        cond:{},

        reduce:function(curr,result){

          result.total+= 1;

        },

        initial:{total:0},

        finalize:function(){}

      })

        i. key:分组字段

        ii. cond:查询条件

        iii. reduce:聚合函数(迭代)

        iv. initial:初始化参数值

        v. finalize:统一一组后的回调函数

        vi. curr:检索当前行数据

      vii. result:统计结果

      b) 简单聚合:db.collection.aggregate()

        

       c) 强大统计:db.collection.mapReduce(

          <map>, // 回调映射函数,为迭代函数传参

          <reduce>, // 回调迭代函数,统计运算

          {

              out: <collection>,

              query: <document>,

              sort: <document>,

              limit: <number>,

              finalize: <function>,

              scope: <document>,

              jsMode: <boolean>,

              verbose: <boolean>,

              bypassDocumentValidation: <boolean>

          }

      )

      i. map函数:

        1. 作用:用于分组

        2. 函数:function map(){ emit(param1, param2); }

        3. 参数说明:

         param1:需要分组的字段,this.字段名

         param2:需要进行统计的字段,this.字段名

      ii. reduce函数:

        1. 作用:处理需要统计的字段

        2. 函数:function reduce(key, values){

           // 统计字段处理  return Array.sum(values);

        }

        3. 参数说明:

           key: 指分组字段(emitparam1)对应的值

           values:指需要统计的字段(emitparam2)值组成的数组

      iii. option部分:

        1. out:将统计结果存放到集合中 (不指定则使用临时集合,在客户端断开后自动删除)

        2. query:一个筛选条件,只有满足条件的文档才会调用map函数(querylimitsort可以随意组合)

        3. sort:和limit结合的sort排序参数(也是在发往map函数前给文档排序),可以优化分组机制

        4. limit:发往map函数的文档数量的上限(要是没有limit,单独使用sort的用处不大)

  • 相关阅读:
    爬虫大作业
    熟悉常用的HDFS操作
    数据结构化和保存
    爬取全部校园新闻
    爬取校园新闻
    Google布隆过滤器
    谷歌json和对象转换
    postgresql和postgis
    json和实体类互相转换
    Linux安装docker-compose
  • 原文地址:https://www.cnblogs.com/zgxblog/p/14377546.html
Copyright © 2020-2023  润新知