实验六:MongoDB数据库的文档基本操作--增删改优化 ---stu

实验名称

MongoDB数据库的文档基本操作–增删改

实验目的

  1. 掌握MongoDB插入文档
  2. 掌握MongoDB更新文档
  3. 掌握MongoDB删除文档
  4. 掌握MongoDB删除集合

实验背景

MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

文档的数据结构和JSON基本一样。所有存储在集合中的数据都是BSON格式。

实验原理

在 MongoDB 中,集合只有在内容插入后才会创建,MongoDB 使用insert() 或 save() 方法向集合中插入文档,使用 update()save() 方法更新集合中的文档,使用remove()函数是用来移除集合中的数据。

实验环境

Ubuntu16.04

MongoDB3.4.23

建议课时

1课时

实验步骤

题目一:插入文档

MongoDB 使用 insert() 或 save() 方法向集合中插入文档,语法如下:

db.COLLECTION_NAME.insert(document)

示例:向数据库student的stuinfo集合插入以下数据

1.启动mongoDB

mongo

1.使用数据库student

use student

2.insert方法 向stuinfo 集合中插入单个文档 {_id:001,name:‘alice’,age:18}

db.stuinfo.insert({_id:001,name:'alice',age:18});

3.save方法插入单个文档{_id:002,name:‘nancy’,age:19}

db.stuinfo.save({_id:002,name:'nancy',age:19});

4.插入多个文档:{_id:003,name:‘harry’,age:18}, {_id:004,name:‘curry’,age:19}

db.stuinfo.insertMany([{_id:003,name:'harry',age:18}, {_id:004,name:'curry',age:19}]);

文档插入完成后,使用find()查看集合数据,具体操作步骤如下图所示:

db.stuinfo.find()

在这里插入图片描述
以上示例中stuinfo是我们的集合名,如果该集合不在该数据库中, MongoDB 会自动创建该集合并插入文档。

还可以可以先将文档定义为一个变量s,再进行插入:

documents=([{_id:003,name:'harry',age:18}, {_id:004,name:'curry',age:19}])
db.stuinfo.insertMany(documents);

操作结果如下图所示:
在这里插入图片描述

插入多条nancy的记录: {_id:006,name:‘nancy’,age:17},{_id:007,name:‘nancy’,age:21}

db.stuinfo.insertMany([{_id:006,name:'nancy',age:17},{_id:007,name:'nancy',age:21}]);

在这里插入图片描述
题目二:更新文档(区分update和save的区别)

MongoDB 使用 update() 和 save() 方法来更新集合中的文档。

(1)update() 方法用于更新已存在的文档。语法格式如下:

db.collection.update(,,upsert,multi,writeConcern)

参数说明:

criteria : update的查询条件,类似sql update查询内where后面的。

objNew : update的对象和一些更新的操作符(如 , , ,inc…)等,也可以理解为sql update查询内set后面的

upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。

multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。

writeConcern :可选,抛出异常的级别。

示例

通过 update() 方法来更新上述文档的姓名(name): 将姓名(name)为curry的文档 更新为了 “李四”。

执行命令:

db.stuinfo.update({'name':"curry"},{$set:{'name':"李四"}});

通过find()查看修改是否成功,具体操作步骤如下所示:
在这里插入图片描述

以上语句只会修改第一条发现的文档,如果要修改多条相同的文档,则需要设置 multi 参数为 true。

如将name为“nancy”所有文档更新为“王五”

db.stuinfo.update({'name':"nancy"},{$set:{'name':"王五"}},{multi:true});

操作结果如下图所示:

在这里插入图片描述

**(2)**save() 方法通过传入的文档来替换已有文档。语法格式如下:

db.collection.save(,{writeConcern:})

参数说明:

document : 文档数据。

writeConcern :可选,抛出异常的级别。

**示例:**替换 _id 为2的文档的数据,将这个文档的name替换为curry,age更新为20:

db.stuinfo.save({'_id':2,'name':"curry",'age':20});

操作步骤如下图所示:

在这里插入图片描述

更多示例:

创建集合col,并生成多条记录{count:i,test2:false,test5:true}, 其中i的值为1到10 :

for(var i=1;i<=10;i++){
	db.col.insert({count:i,test2:false,test5:true})
}

更新按条件查出来的第一条记录(将count>1 的记录中 test2的值更新为OK):

db.col.update( {"count":{$gt:1}}, {$set:{"test2":"OK"}});

更新按条件查出来的全部条记录:(将count>3的记录中 test2的值更新为OK)

db.col.update({"count" :{ $gt:3}},{$set:{"test2":"OK"}},false,true );

将count>14 的记录中 test5的值更新为OK,如果不存在需要update的记录,则添加一条记录:

db.col.update({"count" :{ $gt:14}},{$set:{"test5":"OK"}},true,true );

更新按条件查出来的全部条记录(将count>1 的记录中count的值加1):

db.col.update( { "count" : { $gt : 1 } } , { $inc : { "count" : 1} },false,true );

更新按条件查出来的第一条记录:(将count>10 的记录中count的值加1)

db.col.update( { "count" : { $gt : 10 } } , { $inc : { "count" : 1} },false,false );

题目三:删除文档(注意区分remove和delete)

remove(),deleteOne() 和 deleteMany() 方法可以用来移除集合中的数据。

(1)删除集合col下全部文档

db.col.remove({});

db.col.deleteMany ({});

具体如下图所示

在这里插入图片描述

(2)删除指定条件的文档

删除集合stuinfo中name等于王五的全部文档:

db.stuinfo.deleteMany ({ name : "王五" });

删除 age等于 18 的一个文档:

db.stuinfo.deleteOne ({ age:18});

步骤如图:

在这里插入图片描述

在这里插入图片描述

实验总结

该实验的主要内容是MongoDB的增删改方法的使用。掌握insert和save方法插入单条文档和插入多条文档以及update的参数设置。

理解掌握更新文档时update和save的区别,save是用新传入的文档替来替换已有文档。

理解掌握remove(),deleteOne() 和 deleteMany() 方法用来移除集合中的数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值