MongoDB基本操作命令⼀
安装完成后创建数据⽬录
MongoDB 将数据⽬录存储在 db ⽬录下。但是这个数据⽬录不会主动创建,我们在安装完成后需要创建它。请注意,数据⽬录应该放在根⽬录下 (如: C:\ 或者 D:\ 等 )。
在 D 盘下创建⽬录:d:\mongoDBdata\db
配置MongoDB服务
 创建数据库和⽇志⽂件⽬录:
d:\mongoDBdata\db
d:\mongoDBdata\log\mongod.log
配置⽂件(⼀般⾼版本的会⾃动创建,没有就⾃⼰创建) mongod.cfg
指定 systemLog.path 和 storage.dbPath。具体配置内容如下。
# Where and how to store data.
storage:
dbPath: D:\mongoDBdata\db
journal:
enabled: true
#  engine:
#  wiredTiger:
# where to write logging data.
systemLog:
destination: file
logAppend: true
path:  D:\mongoDBdata\log\mongod.log
# network interfaces
net:
port: 27017
bindIp: 127.0.0.1
将MongoDB服务器作为Windows服务运⾏
像上⾯那样启动mongodb,发现没办法输⼊命令⾏了,这是可以采⽤打开多个窗⼝来连接,但这样就太⿇烦了,解决办法就是将MongoDB服务器作为Windows服务运⾏。
启动MongoDB服务:      net start MongoDB    (启动之后在服务中可看到状态为正在运⾏)
关闭MongoDB服务:      net stop MongoDB
移除MongoDB服务:      D:\mongoDB\ --remove
由于我们并没有指定mongodb服务的端⼝号,所以它启动在默认的27017窗⼝。
It looks like you are trying to access MongoDB over HTTP on the native driver port.
MongoDB 后台管理 Shell
如果你需要进⼊MongoDB后台管理,你需要先打开mongodb安装⽬录的下的bin⽬录,然后执⾏⽂件,
MongoDB Shell是  MongoDB⾃带的交互式Javascript shell,⽤来对MongoDB进⾏操作和管理的交互式环境。
然后可以执⾏⼀些操作:
  第⼀个命令将数字 10 插⼊到 runoob 集合的 x 字段中:db.runoob.insert({x:10})
  查:db.runoob.find().pretty()  //输出格式美化
MongoDB的⼀些命令:
    显⽰所有数据库列表: show dbs
  显⽰当前数据库对象或集合: db
    如果数据库不存在,则创建数据库,否则切换到指定数据库 : use database_name
删除数据库的语法:    db.dropDatabase()    删除当前数据库,默认为 test,你可以使⽤ db 命令查看当前数据库名
  查看已有集合:  show tables/collections
    创建集合: db.createCollection(name, options)
    创建带参数的固定集合:(整个集合空间⼤⼩ 6142800 B, ⽂档最⼤个数为 10000 个)
          db.createCollection('collectionName',{capped: true,autoIndexId: true,size:6142800,max: 10000})
    集合删除语法格式如下: db.collectionName.drop()
    在 MongoDB 中,你不需要创建集合。当你插⼊⼀些⽂档时,MongoDB 会⾃动创建集合:
          db.mycols.insert({'name' : '测试插⼊时⾃动创建集合'})
     插⼊⽂档:
          或
        db.collectionName.save(document)
     save():如果 _id 主键存在则更新数据,如果不存在就插⼊数据。该⽅法新版本中已废弃,可以使⽤ db.collection.insertOne() 或 placeOne() 来代替。      insert(): 若插⼊的数据主键已经存在,则会抛 org.springframework.dao.DuplicateKeyException 异常,提⽰主键重复,不保存当前数据。
    db.collectionName.insertOne():  向指定集合中插⼊⼀条⽂档数据
    db.collectionName.insertMany(): 向指定集合中插⼊多条⽂档数据
   MongoDB 使⽤和⽅法来更新集合中的⽂档:
    update() ⽅法:⽤于更新已存在的⽂档
      db.collectionName.update(
        <query>,                  //update的查询条件
        <update>,                  //update的对象和⼀些更新的操作符等
        {
          upsert: <boolean>,         //可选参数,如果不存在 update的记录,是否插⼊,默认是false,不插⼊
          multi:  <boolean>,        // 可选参数,默认false,只更新到的第⼀条记录,若为 true,把按条件查出来的多条记录全部更新
          writeConcern: <document>     // 可选,抛出异常的级别
        }
      )
      例⼦:db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}},{multi:true})
    save()⽅法:  save() ⽅法通过传⼊的⽂档来替换已有⽂档,_id 主键存在就更新,不存在就插⼊
      db.collectionName.save(
        <document>,            //⽂档数据
        {
          witeConcern: <document>  // 可选参数,抛出异常的级别
        }
      )
  remove() 删除⽂档(移除集合中的数据):
    ve(
      <query>,              // 可选,删除的⽂档的条件
      {
        justOne : <boolean>,     // 可选,如果设为 true 或 1,则只删除⼀个⽂档,如果不设置该参数,或使⽤默认值 false, 则删除所有匹配条件的⽂档。
        writeConcern: <document>  // 可选,抛出异常的级别
      }
    )
    注意:只想删除第⼀条到的记录可以设置 justOne 为 1
       想删除所有数据, 使⽤justOne 默认值为false
    删除集合下的所有数据: ve({})
 remove() ⽅法已经过时了,现在官⽅推荐使⽤ deleteOne() 和 deleteMany() ⽅法。
    如删除集合下全部⽂档:              db.collectionName.deleteMany({})
    删除 status 等于 A 的全部⽂档:  db.collectionName.deleteMany({ status : "A" })
    删除 status 等于 D 的⼀个⽂档:  db.collectionName.deleteOne( { status: "D" } )
    查询⽂档:主要使⽤ find()⽅法,以⾮结构化的⽅式来显⽰所有⽂档。
      db.collectionName.find(query,projection); // query 可选参数,使⽤查询操作符查询条件 projectio
n 可选,使⽤投影操作符指定返回的键。查询时返回⽂档中所有键值,只需省略该参数即可(默认省略)。     
      需要以易读的⽅式来读取数据,可以使⽤  pretty() ⽅法: db.collectionName.find().pretty()
      findOne() ⽅法,只返回⼀个⽂档。
 条件语句查询:(条件操作符)
      db.col.find({"num":50}).pretty()          // num = 50
      db.col.find({"num":{$lt:50}}).pretty()      // num < 50
      db.col.find({"num":{$lte:50}}).pretty()      // num <= 50
      db.col.find({"num":{$gt:50}}).pretty()      // num > 50
      db.col.find({"num":{$gt:50}}).pretty()      // num > 50
      db.col.find({"num":{$gte:50}}).pretty()      // num >= 50
      db.col.find({"num":{$ne:50}}).pretty()      // num != 50
      db.col.find({"num":{$lt:200,$gt:100}})      // 100 < num < 200
MongoDB and 条件:
      db.col.find({key1:value, key2:value2}).pretty()
MongoDB or 条件:
      db.col.find(
        {
          $or : [
            {key1 : value1}, {key2 : value2}
          ]
        } 
      ).pretty()
MongoDB and 和 or 联合使⽤:类似 SQL where key1 > value1 and (key2 = value2 or key3 = value3)
     db.col.find({key1 : {$gt : value1}, $or[{key2 : value2}, {key3 : value3}]).pretty()
MongoDB $type 条件操作符:( $type 操作符是基于 BSON 类型来检索集合中匹配的数据类型,并返回结果。)
    例如,想过去 col 集合中 title 为 String 的数据: (2 代表字符串类型 strig)   参考:
    db.col.find({"title" : {$type : 2}})  或者  db.col.find({"title" : {$type : "string"}})
MongoDB Limit 于 Skip ⽅法:
    Limit() ⽅法:如果你需要在 MongoDB 中读取指定数量的数据记录,可以使⽤ MongoDB 的 Limit ⽅法,limit() ⽅法接受⼀个数字参数,该参数指定从 MongoDB 中读取的记录条数
      db.collectionName.find().limit(number)
    Skip() ⽅法:使⽤ skip() ⽅法来跳过指定数量的数据,skip ⽅法同样接受⼀个数字参数作为跳过的记录条数
      db.collectionName.find().limit(1).skip(1)  //限制显⽰⼀条,然后跳过第⼀条,显⽰第⼆条
      db.collectionName.find().skip(1)       //跳过第⼀条,显⽰后⾯的数据
MongoDB 排序:
      sort() ⽅法:可以通过参数指定排序的字段,并使⽤ 1 和 -1 来指定排序的⽅式,其中 1 为升序排列,⽽ -1 是⽤于降序排列。
      db.collectionName.find().sort({key:1})  例⼦: db.collectionName.find({}, {"title": 1,"_id":0}).sort({"likes": -1})
skip(), limilt(), sort()三个放在⼀起执⾏的时候,执⾏的顺序是先 sort(), 然后是 skip(),最后是显⽰的 limit()。
MongoDB 索引:(每个索引占据⼀定的存储空间,在进⾏插⼊,更新和删除操作时也需要对索引进⾏操作。所以,如果你很少对集合进⾏读取操作,建议不使⽤索引。)
     (由于索引是存储在内存(RAM)中,你应该确保该索引的⼤⼩不超过内存的限制。如果索引的⼤⼩⼤于内存的限制,MongoDB会删除⼀些索引,这将导致性能下降)
      最⼤范围:
        1.集合中索引不能超过64个。
        2.索引名的长度不能超过125个字符
        3. ⼀个复合索引最多可以有31个字段
    索引是特殊的数据结构,索引存储在⼀个易于遍历读取的数据集合中,索引是对数据库表中⼀列或多列的值进⾏排序的⼀种结构
      createIndex() ⽅法来创建索引:
      ateIndex(keys, options);        // Key 值为你要创建的索引字段,1 为指定按升序创建索引,如果你想按降序来创建索引指定为 -1 即可
     如: ateIndex({"title" : 1})
     createIndex() ⽅法中你也可以设置使⽤多个字段创建索引(关系型数据库中称作复合索引)。
     如: ateIndex({"title" : 1, "description": -1})
     在后台创建索引: ateIndex({open : 1, close : 1}, {background : true})
     查看集合索引:  Indexes()
     查看集合索引⼤⼩:alIndexSize()
     删除集合所有索引:db.collectionName.dropIndexes()
     删除集合指定索引:db.collectionName.dropIndex("索引名称")
    注意在 3.0.0 版本前创建索引⽅法为 sureIndex(),之后的版本使⽤了 ateIndex() ⽅法,ensureIndex() 还能⽤,但只是createIndex() 的别名。
MongoDB 聚合:(MongoDB 中聚合(aggregate)主要⽤于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果)
          aggregate() MongoDB中的聚合⽅法。
         db.collectionName.aggregate(AGGREATE_OPERATION)
        例⼦:  db.col.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum:1}}}])        //通过字段
by 对数据进⾏分组,并计算 by 字段相同值的总和
             db.col.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}])    //计算平均值
             db.col.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}])  //获取集合⽂档对应值得最⼩值
             db.col.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}])  //获取集合⽂档对应值得最⼤值             
            db.col.aggregate([{$group : {_id : "$by_user", url : {$push : "$url"}}}])        //在结果⽂档中插⼊值到⼀个数组中
             db.col.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}])      //在结果⽂档中插⼊值到⼀个数组中,但不创建副本
            db.col.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}])    //根据资源⽂档的排序获取第⼀个⽂档数据
            db.col.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}])     //根据资源⽂档的排序获取最后⼀个⽂档数据
  管道: MongoDB 的聚合管道将 MongoDB ⽂档在⼀个管道处理完毕后将结果传递给下⼀个管道处理
  聚合框架中常⽤的⼏个操作:
      $project:修改输⼊⽂档的结构。可以⽤来重命名、增加或删除域,也可以⽤于创建计算结果以及嵌套⽂档。
      $match:⽤于过滤数据,只输出符合条件的⽂档。$match使⽤MongoDB的标准查询操作。
      $limit:⽤来限制MongoDB聚合管道返回的⽂档数。
      $skip:在聚合管道中跳过指定数量的⽂档,并返回余下的⽂档。
      $unwind:将⽂档中的某⼀个数组类型字段拆分成多条,每条包含数组中的⼀个值。
      $group:将集合中的⽂档分组,可⽤于统计结果。
      $sort:将输⼊⽂档排序后输出。
      $geoNear:输出接近某⼀地理位置的有序⽂档。
MapReduce 命令:( Map-Reduce 是⼀种计算模型,简单的说就是将⼤批量的⼯作(数据)分解(MAP)执⾏,然后再将结果合并成最终结果(REDUCE))
      MongoDB提供的  Map-Reduce  ⾮常灵活,对于⼤规模数据分析也相当实⽤
      db.col.mapReduce(
        function(){ emit(key, value)}              // map    函数  (映射函数 (⽣成键值对序列,作为 reduce 函数参数)。)
        function(key,values){ return reduceFunction }      // reduce 函数 (reduce 统计函数,reduce函数的任务就是将 key-values 变成 key-value ,也就是把 values 数组变成⼀个单⼀的值 value )        {
          out : collection,                   // out 统计结果存放集合 (不指定则使⽤临时集合,在客户端断开后⾃动删除)
          query : document,                  // query ⼀个筛选条件,只有满⾜条件的⽂档才会调⽤ map 函数。(query。limit,sort可以随意组合)
          sort : document,                   // sort 和 limit 结合的 sort 排序参数(也是在发往 map 函数前给⽂档排序),可以优化分组机制
          limit : number                    // limit 发往 map 函数的⽂档数量的上限(要是没有limit,单独使⽤sort的⽤处不⼤)
        }
      )
      // 使⽤ MapReduce 要实现两个函数 Map 函数和 Reduce 函数,Map 函数调⽤ emit(key, value), 遍历 collection 中所有的记录, 将 key 与 value 传递给 Reduce 函数进⾏处理
      // Map 函数必须调⽤ emit(key, value) 返回键值对
MongoDB 复制(副本集):( MongoDB 复制是将数据同步在多个服务器的过程,复制还允许您从硬件故障和服务中断中恢复数据)
MongoDB 分⽚:另⼀种集,就是分⽚技术,可以满⾜ MongoDB 数据量⼤量增长的需求。
        当 MongoDB 存储海量的数据时,⼀台机器可能不⾜以存储数据,也可能不⾜以提供可接受的读写吞吐量。这时,我们就可以通过在多台机器上分割数据,使得数据库系统能存储和处理更多的数据     
        分⽚实列
        分⽚结构端⼝分布:
        Shard Server 1: 27020
        Shard Server 2: 27021
        Shard Server 3: 27022
        Shard Server 1: 27023
        Config Server 4: 27100
        Route Process 1: 40000
     步骤⼀:启动 Shard Server
        1. 在 D盘⽂件下创建⽬录( -p 参数表⽰创建⼦⽬录)
          mkdir -p /www/mongoDB/shard/s0
          mkdir -p /www/mongoDB/shard/s1
          mkdir -p /www/mongoDB/shard/s2
          mkdir -p /www/mongoDB/shard/s3
          然后命令⾏执⾏:进⼊到 mongodb 安装⽬录: cd: D:\mongoDB\bin 执⾏命令:
          mongod --port 27020 --dbpath=D:\mongoDBdata\shard\s0 --logpath=D:\mongoDBdata\shard\log\s0.log --logappend
          mongod --port 27021 --dbpath=D:\mongoDBdata\shard\s1 --logpath=D:\mongoDBdata\shard\log\s1.log --logappend
          mongod --port 27022 --dbpath=D:\mongoDBdata\shard\s2 --logpath=D:\mongoDBdata\shard\log\s2.log --logappend
sort命令排序
          mongod --port 27023 --dbpath=D:\mongoDBdata\shard\s3 --logpath=D:\mongoDBdata\shard\log\s3.log --logappend
         步骤⼆:启动 config Server
          mkdir -p /www/mongoDB/shard/config
          mongod --port 27100 --dbpath=D:\mongoDBdata\shard\config --logpath=D:\mongoDBdata\shard\log\config.log --logappend
          步骤三:启动 Route Process
          mongos --port 40000 --configdb localhost:27100 --fork --logpath=D:\mongoDBdata\shard\log\route.log --chunkSize 500
          ( mongos 启动参数中,chunkSize 这⼀项是⽤来指定 chunk 的⼤⼩的,单位是MB,默认⼤⼩为200MB.)
          步骤三出现的问题:
          原因:
              使⽤的 MongoDB 3.4.10 版,这个版本在之前的版本上有做调整,要求configs服务器是副本集模式。3.2和3.2以下都不做强制要求的。
          解决⽅法:
            1.configs服务器配置成副本集模式
2.把MongoDB换成
3.4以下版本
          步骤四:配置 Sharding
          使⽤ MongoDB Shell 登录到 mongos,添加 Shard 节点。
          mongo admin --port 40000
          db.runCommand({ addshard:"localhost:27020" })
          db.runCommand({ addshard:"localhost:27021" })
          db.runCommand({ addshard:"localhost:27022" })
          db.runCommand({ addshard:"localhost:270203" })
          db.runCommand({ enablesharding:"test" })      //设置分⽚存储的数据库
          db.runCommand({ shardcollection: "test.log", key: { id:1,time:1}})
          步骤五:
          程序代码内⽆需太⼤更改,直接按照连接普通的mongo数据库那样,将数据库连接接⼊接⼝40000

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。