第三讲mongodb中的增删改操作
今天给大家分享一下mongodb的增删改查
- 数据的增加,有过sql基础的应该很容易理解的;
首先我们还是连接一下我们的数据库,然后看一下我们的数据库里面是否有数据
我们可以看到我们的tty表里面有一条数据,
然后我们给它在添加一条数据看看,插入语句是(db.tty.insert({name:"yjw"}))
看到了吧返回结果告诉我们已经添加成功,哪我们怎么看到我们是否真的添加成功了那,还是用我们上一次说的的那个方法find一下
语句是(db.tty.find())
可以看到我们的数据已经添加成功,(这里大家需要注意一下的是,在mongodb中插入的是一个对象,所以在insert()里面是一个大括号{}不能直接””写值),
有了单调的插入,现在我们说一下排量插入,
说到排量插入,大家是不是在想 我们insert([{name:”111”},{name:”222”}]),这样就可以啦?,答案是否定的,原因还是上面说的,mongodb存储的是bson,而bson数据不会给我吧数组分开存储,现在我们验证一下
看到了吧,不能插入
,哪我们怎么做排量插入哪,其实在mongodb中的批量插入就是用for循环做的,让我们一起实验一下吧
首先我们吧我们tty表删除掉,( db.tty.drop())
然后我们用for循环插入数据
> for(var i=0;i<10;i++){
... db.tty.insert({naem:"zzl"+1,age:i})
... }
大家可以看到 我们的数据插入成功了,然后让我们打印出数据来看一下结果吧
db.tty.find()
对于添加还有一个方法 就是save,那么这个save和insert有什么不同哪?其实很简单,
save如果遇到索引字段相同的会做更新,而insert要是遇到索引字段相同的就会报错,现在让我们实验一下
大家可以看到,当我们连续两次添加相同信息的时候,insert就会报错,“001”已经存在了,现在我们用 save试试,
db.tty.save({_id:"001",name:"zzl",age:28})
大家可以看到,这样save并没有报错,但是他执行的是一个更新,
然会我们看一下我们的数据是不是真的更新啦
db.tty.find()
我们发现我们的保存语句的确执行的是更新,这就是save和insert的区别
- 1. 数据的删除(remove)
下面我们来说一下数据的删除,
还是老办法,先把我们的数据清除,添加几条数据,直接上代码了
好了我们的3条数据已经插入好了,现在我们来说一下删除操作
我们现在删除其中的一条,语句是(db.tty.remove({age:27}))
我们发现已经age:27的数据已经被删除啦,哪我们怎么做批量删除那,
这里有说一下,批量删除对应不同的版本好像是有不同的方法,不过大同小异
就是db.tty.remove()和db.tty.remove({}),这两个,例如我的
自己报错了,但是我用
成功了,这个大家在写的时候根据自己的版本去确定吧,
然后我们看一下我们的数据是不是真的被删除啦
大家可以看到 数据已经清空,这里的db.tty.count(),方法是一个查询集合总数的方法,大家可以试一下
在这里给大家分享一下,如果你要是要删除一个表里面的数据,而且表很大的话,建议自己drop掉在建立索引,这样不remove要快很多的,
- 1. 数据的更新
db.tty.update({更新条件},{更新数据},在不存在是的厚是否添加,是否批量更新)
update本身有4个参数,前两个是 参数是必须有的,后面两个是自己设置的,
第一个参数:更新的查找条件
第二个参数:要更新的数据
第三个参数:是true和false,当更新的条件找不到时 ,是否添加数据
第四个参数:true,false是否批量更新
下面我们分享一下mongodb中的数据更新操作
首先我们先插入点数据,
这是我们插入的数据
首先我们来更新一下_id=0的数据
db.tty.update({_id:0},{age:27})
这个更新是把id为0 的age字段更新为27
更新成功后让我们看一下效果
我们发现 age是更新了,但是name字段也没有啦,
这是因为db.tty.update({_id:0},{age:27})这个方法是一个强制更新,它会用我们更新的文档来覆盖我们原来的文档,所以name字段被覆盖掉了
哪我们要怎么才能更新一条数据的一个字段那,哪就是局部更新,我们可以使用更新器来完成
第一个更新器:$set(更新文档的一个字段)
然我们来试一下
db.tty.update({_id:1},{$set:{age:27}})
代码已经很明显了,相信不用在说了吧,
第二个更新器:$inc(这个更新器只能用于int型,是在指定的字段值上面在加上我们要更新的值),下面我们用代码说明
db.tty.update({_id:2},{$inc:{age:27}}),
吧id为2的age字段增加27,
代码很明显了,就不在说这个了,
第三个更新器:$unset(这个是删除一个指定的字段)
下面我们用代码演示一下
db.tty.update({_id:3},{$unset:{age:1}})
这个语句就是把id为3的age字段删除掉,
相信都看明白了吧
第四个更新器:$push(这个是只能对数组字段使用,像数组字段里面追加数据 )
下面我们来实验一下
我们先来添加一个 数组字段的数据
db.tty.insert({_id:10,name:"zzl",age:27,back:[]})
数据我们已经创建了,现在我们来更新吧
db.tty.update({_id:10},{$push:{back:"zzl"}})
这句就是像id为10的back数组字段里面追加zzl,下面我们用代码执行一下
这个大家也能明白吧,
第五个更新器:$pushAll,这个顾名思义就是像数组字段批量追加数据,我们还用上一个数据,来演示
db.tty.update({_id:10},{$pushAll:{back:["yjw","zjt","yrh"]}})
演示效果就是
第六个更新器:$addToset(这个也是的数组而言的,是吧数据字段的值直接覆盖为两个一个值,而不是追加)
我们直接上代码演示:
db.tty.update({_id:4},{$addToSet:{back:"zzl"}})
第七个更新器:$pop(删除数组中的一个值,-1是第一个,1是最后一个)
db.tty.update({_id:10},{$pop:{back:-1}})
第八个更新器:$pull(删除数组中的指定值)
下面我们在想id为10的doc中添加一点数据
db.tty.update({_id:10},{$pull:{back:"yjw"}})
这条语句就是删除id为10的数据中,back字段中yjw这个值,下面我们演示一下
第九个更新器:$pullAll这个很明显是 删除批量
下面我们就直接上代码了
db.tty.update({_id:10},{$pullAll:{back:["zjt","zh"]}})
变化已经很明显,大家明白了吧
下面给大家说一下 批量更新和updateToInsert
先来说一下updateToInsert吧,这个就是我们上面说到的 update的第三个参数
下面我们自己上代码了;
db.tty.update({_id:11},{nage:"zzl11",age:27},true)
更新id为11的 有就更新,没有的话就添加
很明显 update没有找到id为11的 所以就给我们添加了一天id为11的记录,内容就是我们要修改的内容,这个就是updateToInsert
最后我们来说一下批量更新,这个就是update的第四个参数了
我们还是直接代码吧;
db.tty.update({name:"zzl"},{$set:{age:1000}},false,true)
更新所有name为zzl的记录age为1000
好了到这里我们要分享的 增删改已经结束,,另外附上一份在网上找到的更新器表,以便大家查找