MongoDB Shell工具:mongosh的使用
1. 使用前的准备
1.1 安装 mongosh
MongoDB的Shell工具mongosh
是一个全功能的JavaScript和Node.js的14.x REPL与MongoDB的部署交互环境。我们通过它可以直接对数据库进行查询和操作。这个工具是需要在安装玩MongoDB后单独安装的,Windows平台对应的mongosh
的下载地址为:
当然你也可以自己在MongoDB下载页面寻找对应的版本进行下载:
- https://www.mongodb.com/try/download/shell?jmp=docs
- https://docs.mongodb.com/mongodb-shell/install/#std-label-mdb-shell-install
下载完成后,进行安装,基本只要点击下一步即可:
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 修改集合中的文档
暂无内容