基本常用命令--文档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

}
View Code

提示:

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"})

posted @ 2023-06-06 14:44  JustJavaIt  阅读(52)  评论(0编辑  收藏  举报