05、MongoDB -- MongoDB 基本用法(往集合中插入文档、更新文档( $inc、$set、$currentDate、$max、$min、$mul、$rename、$unset ))

MongoDB 基本用法(往集合中插入文档、更新文档)

演示前提:


登录单机模式的 mongodb 服务器命令

mongod.exe --config "E:\install\mongodb\mongodb-4.2.25\mongod.conf"

在这里插入图片描述


登录【admin】数据库的 mongodb 客户端命令

mongo mongodb://192.168.0.107:27017/admin -u admin -p 123456

在这里插入图片描述


登录【test】数据库的 mongodb 客户端命令

mongo mongodb://192.168.0.107:27017/test -u LJHAAA -p 123456


基于演示创建、查看、删除 集合,接下来演示文档的用法。



插入文档(插入记录)

语法格式

db.collection名.insert(文档或文档数组,
{
    writeConcern: <document>,
    ordered: <boolean>
})

1、额外的 ordered 选项指定是否对执行有序插入。

如果执行有序插入,当某个文档插入发生错误时,MongoDB 将直接返回不再处理剩下的文档
如果执行无序插入,当某个文档插入发生错误时,MongoDB 会继续插入剩下的文档

2、在插入文档时,如果集合不存在则自动创建集合。这意味着普通 collection 根本不需要创建。


1、图形界面工具 插入文档 演示


如图,此时的 【test】数据库只有【tmp】和【user】这两个集合

在这里插入图片描述


此时是没有【books】集合的。

接下来往【books】集合插入文档,在插入文档时,如果集合不存在则自动创建集合。

db.books.insert([{"name":"火影忍者"},{"name":"家庭教师",price:128}])

写属性名的时候,可以加引号也可以不加引号,不影响。如 name 就加引号,price 就没加引号

在这里插入图片描述


在这里插入图片描述


这里可以看到查询语句

在这里插入图片描述


2、writeConcern 选项支持的 3 个字段

在这里插入图片描述


插入携带 writeConcern 选项的文档演示

ordered: true -----> 表示对文档执行有序插入
w: “majority” -----> 表示文档要写入到大部分的节点里面
j: true -----> 表示启用日志记录,把写入文档的操作记录到日志里面去
wtimeout: 4 -----> 表示写入的超时时长是 4


db.item.insert([{"name": "鼠标"}, {"name": "键盘", price: 28}],
{
    ordered: true,
    writeConcern: {
        w: "majority",
        j: true,
        wtimeout: 4
    }
})

在命令行窗口,往 【test】数据库插入这条文档数据

在这里插入图片描述


在这里插入图片描述



3、演示插入文档不受原有字段限制


就是集合没有限制说插入的文档要包含哪些字段,我们可以不断的插入各种各样字段的文档。
如下命令:

db.books.insert({name: "蜡笔小新", author:"臼井仪人"})

db.books.insert([{type:"动漫类型", price: 80}, {name: "七龙珠", price: 123}])

运行这两条插入文档的命令,一共插入了3个文档,文档内的字段各不相同,有name,有author,有type,有price

在这里插入图片描述


由此可见,mongodb 插入文档时,可以不断的插入新的文档记录,而不会说集合里面有哪些字段,添加的时候就一定要哪些字段这种情况。

在这里插入图片描述


4、两个变体方法


插入单个文档
db.collection.insertOne(文档,
{
   writeConcern: <document>
})

插入多个文档
db.collection.insertMany(文档数组,
{
   writeConcern: <document>,
   ordered: <boolean>
})


更新文档(修改记录)


命令格式

db.collection名.update(
   <filter>,     指定更新条件,类似 SQL 中 UPDATE 语句的 WHERE 子句
   <update>,    指定更新哪些 field,类似 SQL 中 UPDATE 语句的 SET 子句。
   {
      upsert: <boolean>,        指定当更新的文档不存在时,是否执行插入
      multi: <boolean>,          指定是否更新所有符合条件的文档,默认是 false
      writeConcern: <document>,
      collation: <document>,
      arrayFilters: [ <filterdocument1>, ... ],
   })

update 有两个变体版本:

updateOne,相当于将 multi 设为 false。可见普通 update 就相当于 updateOne

updateMany,相当于将 multi 设为 true


< update > 要符合如下格式:

 {
     <update operator>: { <field1>: <value1>, ... },
     <update operator>: { <field2>: <value2>, ... },
      ...
 }

常用的更新运算符(< update operator >)

 $inc 和 $set 都是更新运算符,常用的还有如下更新运算符:
 
 $currentDate:将指定字段设为当前日期。
 
 $min:如果指定的值比该字段值的当前值更小,则修改字段的值。
 
 $max:如果指定的值比该字段值的当前值更大,则修改字段的值。
 
 $mul:将该字段的值乘以指定的值。$inc是增加指定的值。
 
 $rename:重命名该字段。
 
 $unset:删除该字段的值

1、$set:更新 name 字段的值


把 books 集合中的 name 字段的值从【七龙珠】改成【七龙珠ZZZ】

在这里插入图片描述


filter 相当于 SQL 语句中 where 条件,从上面的命令格式可以看出,命令中的 name 就是 < filter >,相当于 sql 中的 where 值。

命令类似 sql 的: update table set name = “七龙珠ZZZ” where name = “七龙珠”

命令:

 db.books.updateOne(
  {name: "七龙珠"},
  {$set: {name: "七龙珠ZZZ"}}
 )

在这里插入图片描述


更新字段值成功

在这里插入图片描述


2、用 $inc 去让指定字段加上指定值


把 七龙珠ZZZ 的价格 123 再加上 1000 , 结果应该是 1123 元
在这里插入图片描述


命令类似 sql 的: update table set price = price + 1000 where name = “七龙珠”

命令:

 db.books.updateOne(
  {name: "七龙珠ZZZ"},
  {$inc: {price: 1000}}
 )

在这里插入图片描述


修改成功

在这里插入图片描述


3、用 $mul 去让指定字段乘以指定值


把 books 集合中的 price 价格 乘 2 , 结果应该是 2246 元

在这里插入图片描述


命令类似 sql 的: update table set price = price * 2 where name = “七龙珠”

命令:

 db.books.updateOne(
  {name: "七龙珠ZZZ"},
  {$mul: {price: 2}}
 )

在这里插入图片描述


修改成功

在这里插入图片描述


4、用 $unset 去删除指定字段


把 name = 七龙珠ZZZ 这个文档的 price 字段给删除掉

在这里插入图片描述


命令:

 db.books.updateOne(
  {name: "七龙珠ZZZ"},
  {$unset: {price: true}}
 )

在这里插入图片描述


price 这个字段被删除了
在这里插入图片描述


5、将指定字段设置当前日期($currentDate),如果字段不存在,其实就是添加字段


给 name = 七龙珠ZZZ 这个文档的【publishDate】字段添加当前日期,如果【publishDate】这个字段不存在,则添加这个字段。

在这里插入图片描述


命令:

 db.books.updateOne(
  {name: "七龙珠ZZZ"},
  {$currentDate: {publishDate: true}}
 )

在图形界面运行命令

在这里插入图片描述


如图:原本不存在的【publishDate】字段被成功增加出来

在这里插入图片描述


6、$set:设置指定字段的值,如果字段不存在,其实就是添加字段


刚刚 price 这个字段已经被删除了,现在又来指定这个字段,把值设置成 1000 元。
结果应该是再次把 【price】这个字段添加出来

在这里插入图片描述


命令:

 db.books.updateOne(
  {name: "七龙珠ZZZ"},
  {$set: {price: 1000}}
 )

在这里插入图片描述


成功添加了【price】这个字段并设置值

在这里插入图片描述


7、$max :将指定字段的值设为当前值与给定值中较大的那一个

在这里插入图片描述


此时的 【price】值是1000,
将指定字段(price)的值设为当前值(1000)与给定值(100)中较大的那一个。
那么执行命令后【price】结果的值应该还是 【1000】


命令:

 db.books.updateOne(
  {name: "七龙珠ZZZ"},
  {$max: {price: 100}}
 )

在这里插入图片描述


当前值(1000)与 给定值(100)中,1000比较大,所以【price】的值还是 【1000】

在这里插入图片描述


再执行一次命令,这次给定值设置为 2000,

当前值(1000)与 给定值(2000)中,2000比较大,所以【price】的值应该是 【2000】


命令:

 db.books.updateOne(
  {name: "七龙珠ZZZ"},
  {$max: {price: 2000}}
 )

在这里插入图片描述


在这里插入图片描述


8、$rename:重命名 books 集合中 name 字段,重命名成 username。


现在集合中的文档,有4个文档有name这个字段。
所以命令中应该是 updateMany ,表示更新所有符合条件的文档

在这里插入图片描述


命令中的这个 {} ,就是指这个 < filter >, 指定更新条件,类似 SQL 中 UPDATE 语句的 WHERE 子句

因为这里是重命名 books 集合中所有文档的name字段,所以不用添加条件,空的查询条件 {} 表示匹配所有文档。

命令类似于 SQL 中的:ALTER TABLE books RENAME COLUMN name TO username;


命令:

db.books.updateMany(
   {}, 
   {$rename: { "name": "username" } }
)

在这里插入图片描述


如图,把 books 集合中的所有文档的 name 字段重命名成 username

在这里插入图片描述

  • 18
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_L_J_H_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值