【MongoDB】2. MongoDB shell常用指令详解

【MongoDB】2. MongoDB shell常用指令详解

写下mongodb shell常用的几个指令,这写都是shell里的JavaScript脚本指令,并不是java中的指令,不过学先学这些脚本指令背后的思想,其中的道理一通百通,有这些知识后,不论是在java里用 MongoDB Java Driver 还是用spring封装的 mongoTemplate 去操作MongoDB都很简单
  1. 查看所有数据库

    show dbs;
    show databases;
    
  2. 查看当前数据库
    因为这些语句使用JavaScript编写的,所以语法和JavaScript一样,你甚至可以在里面写JavaScript的代码哈哈哈哈,算个1+1 输出个helloworld也可以。这个db就相当于是一个对象的引用,db就可以输出他指向的对象

    db
    
  3. 切换\创建数据库
    有则切换,无则创建

    use [DBName]
    
  4. 删除数据库

    db.dropDatabase()
    
  5. 查看集合(表)
    在MongoDB中的表称之为集合,下面这两条都能查询当前指定的db中的表(use db后的的那个数据库)

    show tables;
    show collections;
    
  6. 插入文档(可创建集合)
    在MongoDB中集合是由文档组成的,所谓文档,实际上就是一个JSON字符串,而多个文档就构成了集合,所以一个文档类似于关系型数据库中的一条数据,而集合就类似于关系型数据库中的表
    writeConcern: 也是可选参数,写入关注,其值为一个文档,用于描述写入优先等级,等以后再细看这个写入关注,还有一些类似的关注比如说readConcern之类的
    ordered: 可选参数。如果值为true,则将数组中文档的进行有序插入,如果一个文档发生错误,mongodb将返回,而无需处理数组中的剩余文档。如果false,执行无序插入,如果错误发生在某个文档中,则继续处理数组中的剩余文档。默认为true。
    当该命名的集合不存在时,可创建这个命名的集合
    一般来说用第一个insert()方法就够了

    • 插入一个或多个指定文档

      db.<collectionName>.insert(
         <document or array of documents>,
         {
           writeConcern: <document>,
           ordered: <boolean>
         }
      )
      
    • 插入一个指定文档

      db.<collectionName>.insertOne(
         <document>,
         {
            writeConcern: <document>
         }
      )
      
    • 多个文档插入,如果在插入某一个文档的时候出现了错误,那么后面的文档就无法插入,插入的动作就停止了,但前面已经插入了的文档则不受影响。

      db.<collectionName>.insertMany(
         [ <document 1> , <document 2>, ... ],
         {
            writeConcern: <document>,
            ordered: <boolean>
         }
      )
      
  7. 创建集合

    db.createCollection(collectionName, option);
    db.<collectionName>.insert();
    db.<collectionName>.insertMany({},{},{}...);
    

    db.createColletion()函数中option是可选可不选的
    参数option字段

    字段类型描述
    cappedBoolean如果为true,则启用封闭的集合,上限时固定大小的集合,在达到最大大小时自动覆盖最旧的条目。如果指定为true还需指定size参数
    size数字指定上限集合的最大尺寸(以字节为单位),与capped配合使用
    max数字指定上限集合中允许的最大文档数个数
  8. 删除集合

    db.<collectionName>.drop()
    
  9. 删除文档
    集合提供了四种方法用于删除文档
    query: 这是一个过滤条件,用于规定一个查询规则,筛选出符合该查询条件的所有文档,删除操作将用于经过该查询条件筛选之后的文档,类似于关系新数据库中的where后面的条件,(这个参数在查询、修改等方法里都会出现,是一个很重要的参数)。如果传一个空文档"{}"那么就会删除这个集合中的所有文档,这个方法
    justOne: 可选参数,用于确定是否只删除query中查出来的第一个文档,是一个boolean值,默认为false,如果为true则只删除查出来的第一个文档,false则删除所有query查出来的文档
    writeConcern: 也是可选参数,写入关注,其值为一个文档,用于描述写入优先等级,等以后再细看这个写入关注,还有一些类似的关注比如说readConcern之类的
    collation: 也是一个可选参数,用于指定操作的collation。collation允许用户指定特定于语言的字符串比较规则,例如大小写和重音标记的规则 官方文档在这里可以看一看俺就没看了https://docs.mongodb.com/manual/reference/collation/
    collation文档的字段是这样的,具体啥用处我就没深入了,等以后朝花夕拾来看一看

    {
       locale: <string>,
       caseLevel: <boolean>,
       caseFirst: <string>,
       strength: <int>,
       numericOrdering: <boolean>,
       alternate: <string>,
       maxVariable: <string>,
       backwards: <boolean>
    }
    
    1. remove()
      • 可以带一个查询文档和一个可选的justOne布尔值

        db.<collectionName>.remove({query}, <justOne>)
        
      • 可以采用查询文档和可选的删除选项文档

        db.<collectionName>.remove(
            <query>,
            {
                justOne: <boolean>,
                writeConcern: <document>,
                collation: <document>
            }  
        )
        
    2. deleteOne()
      db.<collectionName>.deleteOne(
          <filter>,
          {
              writeConcern: <document>,
              collation: <document>
          }  
      )
      
    3. deleteMany()
      db.<collectionName>.deleteMany(
          <filter>,
          {
              writeConcern: <document>,
              collation: <document>
          }  
      )
      
    4. findOneAndDelete()
      该方法用于根据筛选条件和排序排序标准删除单个文档,并返回已删除的文档,其有三个参数
      projection: 可选参数,用于选择返回的文档的字段,选择字段必须是文档的子集,如果想反回全部字段,参数可以缺省
      sort: 可选参数,指定过滤器匹配后的文档的排序顺序
      maxTimeMS: 可选参数,指定操作必须在其中完成的时间限制(毫秒为单位),超出限制将引发错误
      db.<collectionName>.findOneAndDelete(
         <filter>,
         {
           projection: <document>,
           sort: <document>,
           maxTimeMS: <number>,
           collation: <document>
         }
      )
      
  10. 修改文档
    查询方法中的参数字段
    < filter >: 这个就不说了,就是写你想要找的键值对
    < update >: 用于修改内容的文档,该字段需要注意,如果只是想替代文档中的字段,那么就可以直接用下面这种格式直接替换,这种格式的update会直接修改符合查询条件的所有字段

    {
        <field1>: <newValue1>,
        <field2>: <newValue2>,
        ...
    }
    

    但如果想要在原有的字段上计算等操作,就需要用到修改操作符,我在这篇博客里写了操作修改符"【MongoDB】Update Operators",在findOneAndUpdateOne()这个方法中必须包含修改操作符,否则就会报错

    db.person2.findOneAndUpdate(
        {
            "name":"Mo"
        },
        {
            $set:{"name":"ProhetMo"}
        }
    )
    

    projection: 属于选项参数(),可选,设置要返回的字段子集,若要返回文档中的所有字段,让该参数缺省。
    sort: 属于选项参数(),可选,用于指定上面的筛选过滤器的排序方式,
    -1为降序,1为正序,让field1降序排序,field2升序排序

    {
        "field1": -1,
        "field2": 1,
        ...
    }
    

    maxTimeMS: 属于选项参数(),可选。指定该修改操作必须在多少时间内完成。若指定时间内完不成,则会报错
    upsert: 也属于选项参数(),可选。用于设置是否在修改的文档不存在,则创建一个新的文档,默认值为false
    returnNewDocument: 属于选项参数(),可选。设置返回的文档是更新后的文档还是更新前的文档。默认为false。

    true: 返回更新后的文档
    false: 返回更新前的文档
    

    collation: 之前写了,这里懒得写了
    arrayFilters: 属于选项参数(),可选,用于数组参数的筛选过滤,其结构为一个数组,该数组中可以设置如何操作数组参数中的值。使用占位符$[indentifier]来操作,使用方法可以看这个官方帮助文档
    writeConcern: 写入关注等级
    multi: 是否批量修改,默认为false
    MongoDB中集合提供了四种修改文档的方法

    1. findOneAndUpdateOne()
      修改筛选出来的文档中的第一个文档,并且返回文档,可以用参数控制返回修改前的文档还是修改后的文档

      db.collection.findOneAndUpdate(
         <filter>,
         <update>,
         {
           projection: <document>,
           sort: <document>,
           maxTimeMS: <number>,
           upsert: <boolean>,
           returnNewDocument: <boolean>,
           collation: <document>,
           arrayFilters: [ <filterdocument1>, ... ]
         }
      )
      
    2. update()
      修改单个或批量修改文档,justOne默认为false,只修改查询的第一项数据等同与updateOne,改成true那么效果就和updateMany一样

      db.collection.update(
         <query>,
         <update>,
         {
           justOne: <boolean>,
           upsert: <boolean>,
           multi: <boolean>,
           writeConcern: <document>,
           collation: <document>,
           arrayFilters: [ <filterdocument1>, ... ]
         }
      )
      
    3. updateOne()
      修改单个文档

      db.collection.updateOne(
         <filter>,
         <update>,
         {
           upsert: <boolean>,
           writeConcern: <document>,
           collation: <document>,
           arrayFilters: [ <filterdocument1>, ... ]
         }
      )
      
    4. updateMany()
      批量修改文档

      db.collection.updateMany(
         <filter>,
         <update>,
         {
           upsert: <boolean>,
           writeConcern: <document>,
           collation: <document>,
           arrayFilters: [ <filterdocument1>, ... ]
         }
      )
      
  11. 查询文档
    查询find()返回值是一个cursor迭代器,可以遍历他去访问里面的每一个元素,query里面可以配合其他操作符去进行各种查询操作

    db.collection.find(query, projection)
    

参考

MongoDB官方帮助文档:https://docs.mongodb.com/manual/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值