目录
数据库操作命令
选择和创建数据库
数据库的删除
集合操作命令
集合的显示创建
集合的隐式创建
集合的删除
文档基本的CRUD(增删改查)
文档的插入
文档的基本查询
文档的更新
删除文档
数据库操作命令
数据库常用的操作命令如下:
选择和创建数据库
选择和创建数据库的语法格式为:use 数据库名称,如果数据库不存在则自动创建,如下:
// 选择 admin 数据库,如果admin数据库不存在则自动创建
use admin
数据库的命令规范:
数据库名可以是满足以下条件的任意UTF-8字符串。
1)不能是空字符串(""")。
2)不得含有 ' ' (空格)、. 、$ 、/ 、\ 和\0 (空字符)。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)
集合的命名规范:
集合名不能是空字符串""。
集合名不能含有 \0字符(空字符),这个字符表示集合名的结尾。集合名不能以 "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])
Parameter | Type | Description |
---|---|---|
query | document | 可选。使用查询运算符指定选择筛选器 |
projection | document | 可选。指定要在与查询筛选器匹配的文档中返回的字段。 |
如果想查询符合条件的数据,可以通过以下方式完成:
如果想查询返回符合条件的第一条数据,可以通过以下方式:
如果想查询结果返回部分字段,则需要使用投影查询(不显示所有字段,只显示指定字段)
文档的更新
更新文档的语法如下:
db.collection.update(query, update, options)
或
db.collection.update(
<query>,
<update>,
{
upsert:<boolean>,
multi:<boolean>,
writeConcern:<document>,
collation:<document>,
arrayFilters:[<filterdocument1>,...],
hint:<document|string>
}
)
Parameter | Type | Description |
---|---|---|
query | document | 更新的选择条件 |
update | document or pipeline | 要应用的修改 |
upsert | boolean | 可选,true为没有查询条件自动创建文档,false则不会插入新文档 |
multif | boolean | 可选,true更新符合查询条件的多个文档,false则更新一个文档 |
writeConcern | document | 可选,表示写问题的文档,抛出异常的级别 |
collation | document | 可选,指定要用于操作的校对规则 |
arrayFilters | array | 可选,用于确定要为数组字段上的更新操作修改哪些数据元素 |
hint | document or string | 可选,指定用于支持查询谓词的索引的文档或字符串 |
覆盖修改:如果想覆盖修改可以执行以下命令:
局部修改:为了解决上面的问题,我们需要使用修改器 $set 来实现,命令如下:
批量修改:更新所有自己设置条件的数据,如果不加后面的参数,则只能更新符合条件的第一条数据,命令如下:
列值增长的修改:如果我们想实现对某列值在原有值的基础上进行增加或减少,可使用 $inc 运算符来实现,命令如下:
删除文档
删除文档的语法结构如下:
db.集合名称.remove(条件)
如果想删除所有数据,可以执行以下命令: