1 案例需求:
1.1.需求说明:
存放文章评论的数据存放到MongoDB中,数据库:articledb,数据结构参考如下:
2.MongoDB操作
2.1.数据库操作
a.选择和创建数据库
- 1.选择和创建数据库语法:
use 数据库名称
- 说明:如果数据库不存在则自动创建,例如,以下语句创建spitdb数据库:
use articledb
,如果之前articledb不存在,则自动创建
- 2.查看当前用户有权限查看的所有的数据库,其命令是:
show dbs
或show databases
- 注意: 在 MongoDB 中,
集合只有在内容插入后才会创建
! 就是说,创建集合(数据表)后要再插入一个文档(记录),集合才会真正创建。否则我们执行show dbs
或show databases
命令的时候,是看不到刚刚创建的集合的
- 4.查看当前正在使用的数据库命令:
db
- 5.MongoDB 中默认的数据库为 test,如果你没有选择数据库,集合将存放在 test 数据库中。
- 数据库名可以是满足以下条件的任意UTF-8字符串。
- 不能是空字符串(“”)。
- 不得含有’ '(空格)、.、$、/、\和\0 (空字符)。
- 应全部小写。
- 最多 64 字节。
- 7.有一些数据库名是保留的,可以直接访问这些有特殊作用的数据库
- admin: 从权限的角度来看,这是"root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。
- local: 这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合
- config: 当Mongo用于分片设置时,config数据库在内部使用,用于保存分片的相关信息。
b.数据库的删除:
- 1.MongoDB 删除数据库的语法格式如下:
db.dropDatabase()
提示:主要用来删除已经持久化的数据库
2.2.集合操作:
a.集合的命名规范:
- 集合名不能是空字符串""。
- 集合名不能含有\0字符(空字符),这个字符表示集合名的结尾。
- 集合名不能以"system."开头,这是为系统集合保留的前缀。
- 用户创建的集合名字不能含有保留字符。有些驱动程序的确支持在集合名里面包含,这是因为某些系统生成的集合中包含该字符。除非你要访问这种系统创建的集合,否则千万不要在名字里出现$
b.集合创建:
1.集合创建说明:
- 1.集合,类似关系型数据库中的表,它即可以显示的创建,也可以隐式的创建
2.集合的显式创建:
- 1.基本语法格式:
db.createCollection(name)
- 2.参数说明:
- name: 要创建的集合名称
- 例如:创建一个名为mycollection的普通集
db.createCollection("mycollection")
- 查看当前库中的表:show tables命令:
show collections 或 show tables
3.集合的隐式创建(常用)
- 1.当向一个集合中插入一个文档的时候,如果集合不存在,则会自动创建集合。
- 2.详见文档的插入章节。
- 3.提示:通常我们使用隐式创建文档即可。
c.集合的删除:
- 1.集合删除语法格式如下:
db.collection.drop()
或者db.集合.drop()
- 2.返回值:
- 如果成功删除选定集合,则 drop() 方法返回 true,否则返回 false。
- 例如:要删除mycollection集合:
db.mycollection.drop()
2.3.文档操作:
a.文档操作说明:
- 1.文档(document)的数据结构和 JSON 基本一样
- 2.所有存储在集合中的数据都是 BSON 格式
b.文档的插入
单个文档插入:
- 1.使用
insert()
或save()
方法向集合中插入文档,语法如下:
- 2.参数解释:
- 3.实现单条数据插入:
- 4.提示:
- mongo中的数字,默认情况下是double类型,如果要存整型,必须使用函数NumberInt(整型数字),否则取出来就有问题了。
- 插入当前日期使用 new Date()
- 插入的数据没有指定 _id ,会自动生成主键值
- 如果某字段没值,可以赋值为null,或不写该字段。
- 5.注意:
- 文档中的键/值对是有序的。
- 文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型(甚至可以是整个嵌入的文档)。MongoDB区分类型和大小写。
- MongoDB的文档不能有重复的键。
- 文档的键是字符串。除了少数例外情况,键可以使用任意UTF-8字符。
- 文档键命名规范:
- 键不能含有\0 (空字符)。这个字符用来表示键的结尾
- 和$有特别的意义,只有在特定环境下才能使用。
- 以下划线"_"开头的键是保留的(不是严格要求的)。
文档的批量插入
- 1.语法
- 2.参数说明:
- 3.批量插入多条评论:
- 4.提示:
- 插入时指定了 _id ,则主键就是该值。
- 如果某条数据插入失败,将会终止插入,但已经插入成功的数据不会回滚掉。
- 因为批量插入由于数据较多容易出现失败,因此,可以使用try catch进行异常捕捉处理,测试的时候可以不处理。如(了解):
c.文档的基本查询
- 1.查询数据的语法格式如下:
db.collection.find(<query>, [projection])
- 2.参数:
- 3.查询所有:如果我们要查询spit集合的所有文档,我们输入以下命令
- 4.查询指定id
- 5.指定id但只要一个文档:
- 6.投影查询(Projection Query):
- 如果要查询结果返回部分字段,则需要使用投影查询(不显示所有字段,只显示指定的字段)。
- 如:查询结果只显示 _id、userid、nickname :>db.comment.find({userid:“1003”},{userid:1,nickname:1}),其中默认 _id 会显示
- 如:查询结果只显示 、userid、nickname ,不显示 _id :>db.comment.find({userid:“1003”},{userid:1,nickname:1,_id:0})
- 再例如:查询所有数据,但只显示 _id、userid、nickname :>db.comment.find({},{userid:1,nickname:1})
- 如果要查询结果返回部分字段,则需要使用投影查询(不显示所有字段,只显示指定的字段)。
c.文档的更新:
- 1.更新文档的语法:
db.collection.update(query, update, options)
//或
db.collection.update(
<query>,
<update>,
{
upsert: <boolean>,
multi: <boolean>,
writeConcern: <document>,
collation: <document>,
arrayFilters: [ <filterdocument1>, ... ],
hint: <document|string> // Available starting in MongoDB 4.2
}
)
- 2.参数:
> 提示:主要关注前四个参数即可。
- 3.覆盖的修改
db.comment.update({_id:"1"},{likenum:NumberInt(1001)})
- 4.局部修改
db.comment.update({_id:"2"},{$set:{likenum:NumberInt(889)}})
- 5.批量的修改
//默认只修改第一条数据
db.comment.update({userid:"1003"},{$set:{nickname:"凯撒2"}})
//修改所有符合条件的数据
db.comment.update({userid:"1003"},{$set:{nickname:"凯撒大帝"}},{multi:true})
- 6.列值增长的修改
如果我们想实现对某列值在原有值的基础上进行增加或减少,可以使用 $inc 运算符来实现。
需求:对3号数据的点赞数,每次递增1
db.comment.update({_id:"3"},{$inc:{likenum:NumberInt(1)}})
d.删除文档
- 1.删除文档的语法结构:
db.集合名称.remove(条件)
- 2.以下语句可以将数据全部删除,请慎用
db.comment.remove({})
- 3.如果删除_id=1的记录,输入以下语句
db.comment.remove({_id:"1"}