基本常用命令--文档CRUD
文档基本CRUD
文档(document)的数据结构和 JSON 基本一样。
所有存储在集合中的数据都是 BSON 格式。
文档的插入
单个文档插入
使用insert() 或 save() 方法向集合中插入文档,语法如下:
示例:
要向comment的集合(表)中插入一条测试数据:
Compass中
{ "articleid": "100000", "content": "今天天气真好,阳光明媚", "userid": "1001", "nickname": "Rose", "createdatetime": { "$date": "2023-05-31T06:25:55.598Z" }, "likenum": 10, "state": null }
提示:
1)comment集合如果不存在,则会隐式创建
2)mongo中的数字,默认情况下是double类型,如果要存整型,必须使用函数NumberInt(整型数字),否则取出来就有问题了。
3)插入当前日期使用 new Date()
4)插入的数据没有指定 _id ,会自动生成主键值
5)如果某字段没值,可以赋值为null,或不写该字段。
执行后,如下,说明插入一个数据成功了。
WriteResult({ "nInserted" : 1 })
注意:
1. 文档中的键/值对是有序的。
2. 文档中的值不仅可以是在双引号里面的字符串,还可以是其他几种数据类型(甚至可以是整个嵌入的文档)。
3. MongoDB区分类型和大小写。
4. MongoDB的文档不能有重复的键。
5. 文档的键是字符串。除了少数例外情况,键可以使用任意UTF-8字符。
文档键命名规范:
(1)键不能含有 \0 (空字符)。这个字符用来表示键的结尾。
(2). 和$有特别的意义,只有在特定环境下才能使用。
(3)以下划线 "_"开头的键是保留的(不是严格要求的)。
批量插入
示例:
批量插入多条文章评论:
提示:
插入时指定了 _id ,则主键就是该值。
如果某条数据插入失败,将会终止插入,但已经插入成功的数据不会回滚掉。
因为批量插入由于数据较多容易出现失败,因此,可以使用try catch进行异常捕捉处理,测试的时候可以不处理。如(了解):
基本查询
查询数据的语法格式如下:
db.collection.find(<query>, [projection])
参数:
【示例】
(1)查询所有 如果我们要查询comment集合的所有文档,我们输入以下命令
db.comment.find() 或 db.comment.find({})
这里你会发现每条文档会有一个叫 _id的字段,这个相当于我们原来关系数据库中表的主键,当你在插入文档记录时没有指定该字段, MongoDB会自动创建,其类型是ObjectID类型。 如果我们在插入文档记录时指定该字段也可以,其类型可以是ObjectID类型,也可以是MongoDB支持的任意类型。
如果我想按一定条件来查询,比如我想查询userid为1002的记录,怎么办?很简单!只 要在find()中添加参数即可,参数也是json格式,如 下:
db.comment.find({userid:'1002'})
Compass中
如果你只需要返回符合条件的第一条数据,我们可以使用findOne命令来实现,语法和find一样。 如:查询用户编号是1003的记录,但只最多返回符合条件的第一条记录:db.comment.findOne({userid:'1003'})
投影查询(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})
文档的更新
官网详细介绍:
https://www.mongodb.com/docs/manual/tutorial/update-documents/
更新文档的语法:
【示例】
(1)覆盖的修改 如果我们想修改_id为1的记录,点赞量为1001,输入以下语句:
db.comment.update({_id:"1"},{likenum:NumberInt(1001)})
执行后,我们会发现,这条文档除了likenum字段其它字段都不见了,
(2)局部修改
为了解决这个问题,我们需要使用修改器$set来实现,命令如下: 我们想修改_id为2的记录,浏览量为889,输入以下语句:
db.comment.update({_id:"2"},{$set:{likenum:NumberInt(889)}})
(3)批量的修改
更新所有用户为1003的用户的昵称为凯撒大帝。
默认只修改第一条数据
db.comment.update({userid:"1003"},{$set:{nickname:"凯撒2"}})
//修改所有符合条件的数据
db.comment.update({userid:"1003"},{$set:{nickname:"凯撒大帝"}},{multi:true})
提示:如果不加后面的参数,则只更新符合条件的第一条记录
(4)列值增长的修改 如果我们想实现对某列值在原有值的基础上进行增加或减少,可以使用$inc运算符来实现。 需求:对3号数据的点赞数,每次递增1
db.comment.update({_id:"3"},{$inc:{likenum:NumberInt(1)}})
文档的删除
语法结构:
db.集合名称.remove(条件)
以下语句可以将数据全部删除,请慎用
db.comment.remove({})
如果删除_id=1的记录,输入以下语句
db.comment.remove({_id:"1"})