zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

MongoDB--》基本常用命令使用

2023-04-18 16:07:52 时间

目录

数据库操作命令

选择和创建数据库

数据库的删除

集合操作命令

集合的显示创建

集合的隐式创建

集合的删除

文档基本的CRUD(增删改查)

文档的插入

文档的基本查询

文档的更新

删除文档


数据库操作命令

数据库常用的操作命令如下:

选择和创建数据库

选择和创建数据库的语法格式为:use 数据库名称,如果数据库不存在则自动创建,如下:

// 选择 admin 数据库,如果admin数据库不存在则自动创建
use admin

数据库的命令规范

数据库名可以是满足以下条件的任意UTF-8字符串

1)不能是空字符串(""")。
2)不得含有 ' ' (空格)、. 、$ 、/ 、 和 (空字符)。

2)应全部小写。
4)最多64字节。

有一些数据库名是保留的,可以直接访问这些有特殊作用的数据库
admin:从权限的角度来看,这是"root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
local:这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合
config:当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。

查看 “有权限查看的” 所有的数据库 的命令

show dbs 
或
show databases

举例如下:可以看到我们创建的admin1数据库并没有和MongoDB本身存在的数据库并列,下面只是显示我们切换到了admin1数据库而已,这是什么原因呢?

原来,MongoDB数据库的机制是,当我们创建数据库而并没有给其赋予集合内容时,该数据库就只会存储在内存当中而不会存储到磁盘中,这也就是导致我们虽然创建了数据库但是并没有显示的原因。说白了:你不给我数据我就不显示。

查看当前正在使用的数据库命令

db

虽然我们创建的数据库并没有赋予其内容,但其也是真实存在的,如下:

数据库的删除

数据库的删除命令(主要用来删除已经持久化的数据库)

// db代表当前正在使用的数据库
db.dropDatabase()

集合操作命令

集合类似于关系数据库中的表,可以显示的创建也可以隐式的创建,其相关命令如下:

集合的显示创建

集合的显示创建命令

// name: 要创建的集合名称
db.createCollection(name)

集合的命名规范

集合名不能是空字符串""。
集合名不能含有 字符(空字符),这个字符表示集合名的结尾。

集合名不能以 "system." 开头,这是为系统集合保留的前缀。

用户创建的集合名字不能含有保留字符。有些驱动程序的确支持在集合名里面包含,这是因为某些系统生成的集合中包含该字符。除非你要访问这种系统创建的集合,否则千万不要在名字里出现$。

查看当前库中的表的命令

show collections
或
show tables

集合的隐式创建

集合的隐式创建命令

当向一个集合中插入一个文档的时候,如何集合不存在,则会自动创建集合,通常我们使用隐式创建文档即可。

集合的删除

集合的删除命令(如果成功删除指定集合,drop()方法返回true,否则返回false)

db.collection.drop()
或
db.集合.drop()

注意:在MongoDB中,集合只有在内容插入后才会创建!也就是说,创建集合(数据表)后要再插入一个文档(记录),集合才会真正创建。

文档基本的CRUD(增删改查)

文档 (document) 的数据结构和JSON基本一样,所有存储在集合中的数据都是BSON格式。

文档的插入

单个文档的插入:使用 insert() 或 save() 方法向集合中插入文档,其基本语法如下:

db.collection.insert(
	<document or array of documents>,
	{
		writeConcern: <documents>,
		ordered: <boolean>
	}
)

document:document or array 要插入到集合中的文档或文档数组(json格式)

writeConcern:document,表达书面关注的文档。

ordered:可选,为真则按顺序插入数组中的文档,为假则执行无须插入。

示例如下:(显示插入成功)

多个文档的插入:使用 insertMany() 方法向集合中插入文档,其基本语法如下:

db.collection.insertMany(
	<document or array of documents>,
	{
		writeConcern: <documents>,
		ordered: <boolean>
	}
)

插入异常捕获使用 try catch :如果某条数据插入失败,将会终止插入,但已经插入成功的数据不会回滚掉。因为批量插入由于数据较多容易出现失败,因此,可以使用try catch进行异常捕捉处理,测试的时候可以不处理。如下:

注意

1)comment集合如果不存在,则会隐式创建。
2)mongo中的数字,默认情况下是double类型,如果要存整型,必须使用函数NumberInt(整型数字),否则取出来就有问题了。
3)插入当前日期使用new Date()。
4)插入的数据没有指定_id,会自动生成主键值。
5)如果某字段没值,可以赋值为null,或不写该字段。

文档的基本查询

查询数据的命令如下:

db.collection.find(<query>,[projection])
ParameterTypeDescription
querydocument可选。使用查询运算符指定选择筛选器
projectiondocument可选。指定要在与查询筛选器匹配的文档中返回的字段。

如果想查询符合条件的数据,可以通过以下方式完成:

如果想查询返回符合条件的第一条数据,可以通过以下方式:

如果想查询结果返回部分字段,则需要使用投影查询(不显示所有字段,只显示指定字段)

文档的更新

更新文档的语法如下:

db.collection.update(query, update, options)
或
db.collection.update(
	<query>,
	<update>,
	{
		upsert:<boolean>,
		multi:<boolean>,
		writeConcern:<document>,
		collation:<document>,
		arrayFilters:[<filterdocument1>,...],
		hint:<document|string>
	}
)
ParameterTypeDescription
querydocument更新的选择条件
updatedocument or pipeline要应用的修改
upsertboolean可选,true为没有查询条件自动创建文档,false则不会插入新文档
multifboolean可选,true更新符合查询条件的多个文档,false则更新一个文档
writeConcerndocument可选,表示写问题的文档,抛出异常的级别
collationdocument可选,指定要用于操作的校对规则
arrayFiltersarray可选,用于确定要为数组字段上的更新操作修改哪些数据元素
hintdocument or string可选,指定用于支持查询谓词的索引的文档或字符串

覆盖修改:如果想覆盖修改可以执行以下命令:

局部修改:为了解决上面的问题,我们需要使用修改器 $set 来实现,命令如下:

批量修改:更新所有自己设置条件的数据,如果不加后面的参数,则只能更新符合条件的第一条数据,命令如下:

列值增长的修改:如果我们想实现对某列值在原有值的基础上进行增加或减少,可使用 $inc 运算符来实现,命令如下:

删除文档

删除文档的语法结构如下:

db.集合名称.remove(条件)

如果想删除所有数据,可以执行以下命令: