当前位置 博文首页 > jcLee95的博客:MongoDB Shell工具:mongosh的使用

    jcLee95的博客:MongoDB Shell工具:mongosh的使用

    作者:[db:作者] 时间:2021-09-18 15:45

    MongoDB Shell工具:mongosh的使用

    CSDN用户名:jcLee95

    1. 使用前的准备

    安装 mongosh

    MongoDB的Shell工具mongosh是一个全功能的JavaScript和Node.js的14.x REPL与MongoDB的部署交互环境。我们通过它可以直接对数据库进行查询和操作。这个工具是需要在安装玩MongoDB后单独安装的,Windows平台对应的mongosh的下载地址为:

    • https://downloads.mongodb.com/compass/mongosh-1.0.5-x64.msi

    当然你也可以自己在MongoDB下载页面寻找对应的版本进行下载:

    • https://www.mongodb.com/try/download/shell?jmp=docs
    • https://docs.mongodb.com/mongodb-shell/install/#std-label-mdb-shell-install

    下载完成后,进行安装,基本只要点击下一步即可:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    启动 MongoDB

    因为之后我们使用mongosh来连接MongoDB实例,因此先要对 MongoDB进行启动。启动主要有两种方式。

    (1)在bin目录中直接使用如下命令启动:
    找到你的安装目录下的bin目录,如果你还没有将该目录添加到Path环境变量下,那么你需要通过命令行进入到该目录后才能执行相关命令。
    在这里插入图片描述
    命令如下:

     mongod --dbpath="D:\Program Files\MongoDB\Server\5.0\data"
    

    注意中间不要有空格。右面--dbpath选项所指定的就是你的数据库存放目录。
    (2)通过配置文件进行启动:
    有两种写法,一种是 -f选项加路径,如

    mongod -f ../config/mongod.conf
    

    另外一种写法是 --config选项加路径,如

    mongod --config ../config/mongod.conf
    

    配置文件的格式如:

    systemLog:
        destination: file
        #The path of the log to which mongod or mongos should send all diagnostic logging information
        path: "D:/Program Files/MongoDB/Server/5.0/log/mongo.log"
        logAppend: true
    storage:
        journal:
            enabled: true
        # the directory where the mongod instance stores its data.Default Value is "/data/db".
        dbPath: D:\Program Files\MongoDB\Server\5.0\data
    net:
        bindIp: 127.0.0.1
    

    2. 使用mongosh连接实例

    一般的链接命令格式为:

    mongosh "mongodb://hostname:port"
    

    本地 MongoDB 实例使用 默认端口 27017 ,在mongosh没有任何命令行选项的情况下可以直接简写为一下命令进行连接:

    mongosh
    

    这相当于使用命令:mongosh "mongodb://localhost:27017"
    一下时一次连接到本地实例的截图:
    在这里插入图片描述

    3. 创建、读取、更新和删除(CURD)操作

    3.1 数据库的创建

    创建或插入操作将新文档添加到集合中。如果该集合不存在,则创建操作也会创建该集合。可以在一次操作中插入单个文档或多个文档。

    mongo
    

    选择和创建数据库

    use 数据库名
    

    注意:使用该命令的时候,如果有数据库名称指定的数据库则会使用该数据库,否则将自动创建名称为所指定名称的数据库。
    数据库名需要满足一定的规则:

    • 它可以是任意满足UTF-8编码的字符串;
    • 不允许是空字符串;
    • 不允许含有’ '(空格)、.(点)、$、/、\、和\0(空字符串);
    • 应采用全小写字符,并且布草过64字节;
    • 不能使用一些暴力与的数据库名:
      • admin: 这个相当于具有root权限的数据库,要是将一个用户添加到该数据库,则用户将自动地继承所有数据库的权限。某些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器等等;
      • local: 该数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合;
      • config: 当Mongo用于分片设置时,config数据库再内部使用,用于保存分片的相关信息。

    也可以查看当前所使用的数据库:

    db
    

    查看所有的数据库:

    show dbs
    

    (或者show databases

    执行效果如图:
    在这里插入图片描述
    在这个截图中看到,并没有显示出我们使用use命令所创建的数据库“mydb”,是因为我们还没有把它存储在硬盘中,但这个新的数据库已经可以在内存中建立了。

    其中MondoDB中所默认的数据库名为test,也就是说如果你没有指定过其他名称的数据库,所使用的集合将全部存放在名为test的默认数据库中。

    在创建数据库后集合不会马上创建,只有在插入了内容后才会创建集合。这里的集合就相当于MySQL等数据库中的数据表。也就是说创建集合后要再插入一个文档(相当于MySQL中的记录),集合才会创建。

    3.2 数据库的删除

    删除操作从集合中删除现有文档。您可以在一次操作中删除单个文档或多个文档。可以指定用于标识要删除的文档的条件或过滤器。这些过滤器使用与读取操作相同的语法。
    MongoDB删除数据库shell的格式为:

    db.dropDatabase()
    

    这里的Shell命令与JavaScript中的函数类似,以该删除函数为例,db是我们所use的一个数据库对象,执行的是该对象的dropDatabase()函数(方法)。不过需要注意,mongosh方法终究不是Node.js或者某一其他编程语言中的方法或函数。现在我们可以测试删除刚刚所创建的数据库:
    在这里插入图片描述
    这个也只是对硬盘中的数据库的操作,实际上现在我们所“use”的还是mydb。

    3.3 集合操作

    3.3.1 集合的创建

    这里的集合就相当于MySQL等关系型数据库中的数据表,集合是“文档”的容器,而文档则相当于MySQL等关系型数据库中的“记录”,也就是所存储的一条数据。为当前所使用的数据库“db”显示创建一个集合的格式如下:

    db.createCollection(name)
    
    • name 该参数是要为当前所使用的数据库db创建的集合的名称,需要使用引号表示名称的字符串,如:
      db.createCollection("mydb")
      

    实际上“集合”还可以被隐式地创建。当向一个集合中插入一个文档时,若被插入文档的集合不存在,则将自动创建该集合

    3.3.2 查看所有集合

    其命令如下:

    show collections
    

    如图:
    在这里插入图片描述

    3.3.3 集合的删除

    删除集合的格式为:

    db.collection.drop()
    

    或者

    db.集合名.drop()
    

    3.4 文档操作

    3.4.1 文档的插入

    (1)插入单个文档

    db.collection.insertOne()
    

    例如:

    db.students.insertOne( { name: "小明", age: 16 } );
    

    以下是shell执行的截图:
    在这里插入图片描述
    可以看到mongosh返回了一段脚本执行的信息,即:

    {
            "acknowledged" : true,
            "insertedId" : ObjectId("6125ae05d3b72d0dd071b02f")
    }
    

    说明我们执行成功了。使用可视化工具也可以查看到在当前使用的名为test数据库下,名为student的集合下添加了一个文档:
    在这里插入图片描述

    (2)插入多个文档

    我们也可以一次性插入多个文档:

    db.collection.insertMany()
    ```例如:
    ```js
     db.techers.insertMany( [ { name: "JackMa", age: 57 }, { name: "Michael Yu", age: 59 } ] );
    

    在这里插入图片描述在这里插入图片描述

    3.4.2 从集合中删除文档

    MongoDB中的删除操作有两种,一个是db.collection.deleteOne(),用于从集合中删除单个文档;另一个是db.collection.deleteMany(),用于按照某种规则删除多个文档。他们都是针对单个集合的删除

    (1)db.collection.deleteOne()

    格式为:

    db.collection.deleteOne(
       <filter>,
       {
          writeConcern: <document>,
          collation: <document>,
          hint: <document|string>        // Available starting in MongoDB 4.4
       }
    )
    

    其中:

    • filter :过滤器,用于指定删除条件。相当于SQL中使用where语句。db.collection.deleteOne()方法将 删除与过滤器匹配的第一个文档。如果需要精确删除某一条文档,应该使用属于唯一索引一部分的字段,比如_id

    • writeConcern(可选):它关注描述了从 MongoDB 请求对独立mongod或副本集或分片集群的写入操作的确认级别。

    • collation(可选):它指定了用于操作的排序规则。排序规则允许用户 为字符串比较指定特定于语言的规则,例如字母和重音符号的规则。

    • hint(可选):hint指定用于支持查询谓词的 索引 的文档或字符串。该选项可以采用索引规范文档索引名称字符串。如果指定的索引不存在,则操作会出错。

      索引 是一种特殊的数据结构,它以易于遍历的形式存储集合数据集的一小部分,用于支持在 MongoDB 中高效执行查询。

      • 如果没有索引则MongoDB 必须执行集合扫描,即扫描集合中的每个文档,以选择那些与查询语句匹配的文档。
      • 如果查询存在合适的索引,MongoDB 可以使用该索引来限制它必须检查的文档数量。

      (MongoDB 索引使用 B 树数据结构)

    > db
    test
    > db.students.insertMany([
    ...     { "_id": 1, "name":"三张", "age":12, "chinaese":90,  "math" : 67, "english" : 59 },
    ...     { "_id": 2, "name":"李四", "age":13, "chinaese":83,  "math" : 69, "english" : 70 },
    ...     { "_id": 3, "name":"王五", "age":15, "chinaese":97,  "math" : 73, "english" : 57 },
    ...     { "_id": 4, "name":"赵六", "age":11, "chinaese":86,  "math" : 82, "english" : 70 },
    ...     { "_id": 5, "name":"钱七", "age":15, "chinaese":99,  "math" : 61, "english" : 60 },
    ...     { "_id": 6, "name":"吴八", "age":14, "chinaese":91,  "math" : 67, "english" : 86 }])
    
    { "acknowledged" : true, "insertedIds" : [ 1, 2, 3, 4, 5, 6 ] }
    

    建立索引:

    db.students.createIndex( { chinaese: 1, _id: -1 } )
    
    {
            "numIndexesBefore" : 1,
            "numIndexesAfter" : 2,
            "createdCollectionAutomatically" : false,
            "ok" : 1
    }
    

    删除操作使用一个索引:

    
    

    (2)db.collection.deleteMany()

    3.4.3 修改集合中的文档

    cs
    下一篇:没有了