第三讲mongodb中的增删改操作

今天给大家分享一下mongodb的增删改查

  1. 数据的增加,有过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. 1.       数据的删除(remove

下面我们来说一下数据的删除,

还是老办法,先把我们的数据清除,添加几条数据,直接上代码了

好了我们的3条数据已经插入好了,现在我们来说一下删除操作

我们现在删除其中的一条,语句是(db.tty.remove({age:27}))

我们发现已经age:27的数据已经被删除啦,哪我们怎么做批量删除那,

这里有说一下,批量删除对应不同的版本好像是有不同的方法,不过大同小异

就是db.tty.remove()和db.tty.remove({}),这两个,例如我的

自己报错了,但是我用

成功了,这个大家在写的时候根据自己的版本去确定吧,

然后我们看一下我们的数据是不是真的被删除啦

大家可以看到 数据已经清空,这里的db.tty.count(),方法是一个查询集合总数的方法,大家可以试一下

在这里给大家分享一下,如果你要是要删除一个表里面的数据,而且表很大的话,建议自己drop掉在建立索引,这样不remove要快很多的

  1. 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

好了到这里我们要分享的 增删改已经结束,,另外附上一份在网上找到的更新器表,以便大家查找

posted @ 2015-01-08 17:51  瀚海行舟  阅读(165)  评论(0编辑  收藏  举报