MongoDB Shell工具:mongosh的使用

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 MongoDB,通用型 2核4GB
简介: MongoDB Shell工具:mongosh的使用

MongoDB Shell工具:mongosh的使用


1. 使用前的准备

1.1 安装 mongosh

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

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

下载完成后,进行安装,基本只要点击下一步即可:

1.2 启动 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

3.1.1 选择和创建数据库

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 修改集合中的文档

暂无内容

相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。 &nbsp; 相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
1月前
|
存储 Shell Linux
【Shell 命令集合 系统设置 】Linux 软件包管理工具 rpm命令 使用指南
【Shell 命令集合 系统设置 】Linux 软件包管理工具 rpm命令 使用指南
49 0
|
1月前
|
运维 网络协议 安全
【Shell 命令集合 网络通讯 】Linux 网络抓包工具 tcpdump命令 使用指南
【Shell 命令集合 网络通讯 】Linux 网络抓包工具 tcpdump命令 使用指南
44 0
|
1月前
|
Linux Shell C语言
【Shell 命令集合 磁盘维护 】Linux 分区管理的工具 sfdisk命令使用教程
【Shell 命令集合 磁盘维护 】Linux 分区管理的工具 sfdisk命令使用教程
30 1
|
1月前
|
安全 Shell Linux
【Shell 命令集合 磁盘管理 】Linux 磁盘分区工具 fdisk命令使用教程
【Shell 命令集合 磁盘管理 】Linux 磁盘分区工具 fdisk命令使用教程
49 0
|
1月前
|
存储 Shell Linux
【Shell 命令集合 磁盘维护 】Linux 文件系统维护工具 ext2ed命令使用教程
【Shell 命令集合 磁盘维护 】Linux 文件系统维护工具 ext2ed命令使用教程
26 0
|
1月前
|
存储 安全 Shell
⭐⭐【Shell 命令集合 文件传输 】Linux ftp工具 使用指南
⭐⭐【Shell 命令集合 文件传输 】Linux ftp工具 使用指南
44 0
|
2月前
|
Linux Shell Perl
Linux下的Shell基础——文本处理工具(五)
Linux下的Shell基础——文本处理工具(五)
31 1
Linux下的Shell基础——文本处理工具(五)
|
1月前
|
存储 算法 Shell
【Shell 命令集合 备份压缩 】⭐⭐Linux 压缩和归档工具 zip命令 使用指南
【Shell 命令集合 备份压缩 】⭐⭐Linux 压缩和归档工具 zip命令 使用指南
36 0
|
1月前
|
存储 Shell Linux
【Shell 命令集合 文件传输 FTP客户端工具】Linux ncftp 命令使用指南
【Shell 命令集合 文件传输 FTP客户端工具】Linux ncftp 命令使用指南
39 0
|
1月前
|
存储 算法 Shell
【Shell 命令集合 备份压缩 】⭐⭐⭐Linux 解压缩gz工具 gzip命令 使用指南
【Shell 命令集合 备份压缩 】⭐⭐⭐Linux 解压缩gz工具 gzip命令 使用指南
34 0