MongoDB入门系列(二):Insert、Update、Delete、Drop

概述  

本章节介绍Insert、Update、Delete、Drop操做基本语法。sql

 

环境:mongodb

Version:3.4数据库

insert

insert()基本语法以下:数组

db.collection.insert(
   <document or array of documents>,
   {
     writeConcern: <document>,
     ordered: <boolean>
   }
)

1.单条插入服务器

db.person.insert({"age":10})

2.多条插入测试

使用文档数组做为参数,不过注意批量插入也会存在长度的限制spa

db.person.insert([{"age":11},{"age":12}])

3.错误的语法:3d

db.person.insert({"age":11},{"age":12})

只有age:11被插入进去,因为接收的插入文档不是数组code

容易误导的地方:对象

db.person.insert([{"age":11},{"age":12}])

db.person.insert({"name":11,"age":12})

db.person.insert({"age":11,"age":12})

第一个插入是插入两个文档,第二个插入是插入一个文档,第三个虽然也是一个文档可是因为键重复,因此只有后一个值会被插入age:12

delete

remove() 方法的基本语法格式以下所示:

db.collection.remove(
   <query>,
   {
     justOne: <boolean>,
     writeConcern: <document>
   }

参数说明:

  • query :(可选)删除的文档的条件。
  • justOne : (可选)若是设为 true 或 1,则只删除一个文档。
  • writeConcern :(可选)抛出异常的级别。

1.删除num大于100的数据

db.new.remove({"num":{$gt:100}});

2.删除new集合全部数据

db.new.remove({});

注意:针对大表清空全部数据慎重使用remove({}),会很是的慢,并且对服务器的压力也很是的大,能够选择drop操做。

3.删除num等于100的数据

db.new.remove({"num":100})

4.测试删除速度

var timeRemoves = function(){

    var start =(new Date()).getTime();

    db.new.remove({'num':{$gt:100}});

    db.new.findOne();

    var timediff= (new Date()).getTime() - start;

    print("removeTimes: "+timediff+"ms")

}

timeRemoves()

update

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

db.collection.update(
   <query>,
   <update>,
   {
     upsert: <boolean>,
     multi: <boolean>,
     writeConcern: <document>
   }
)

参数说明:

  • query : update的查询条件,相似sql update查询内where后面的。
  • update : update的对象和一些更新的操做符(如$,$inc...)等,也能够理解为sql update查询内set后面的
  • upsert : 可选,这个参数的意思是,若是不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
  • multi : 可选,mongodb 默认是false,只更新找到的第一条记录,若是这个参数为true,就把按条件查出来多条记录所有更新。
  • writeConcern :可选,抛出异常的级别。

例:

db.person.insert([{"name":"chen","age":15},{"name":"li","age":20},{"name":"zhang","age":20}]);

$ set修改符

用于修改键的值,若是键不存在就增长键

//将age=10的数据改为15,默认若是age=10的有多条记录只更新第一条

db.person.update({"name":"li"},{$set:{"age":10}})

//更新多个知足条件的值,同时若是更新的值不存在就插入更新的值,注意:这里插入的值是20不是30

db.person.update({"age":30},{$set:{"age":20}},{multi:true,upsert:true})

能够省略multi,upsert,这里不能有花括号,可是不建议这样作

db.person.update({"age":30},{$set:{"age":20}},true,true)

//值更新为数组

db.person.update({"name":"zhang"},{$set:{"age":[10,12,14]}},{upsert:true})

//修改成其它的值

db.person.update({"name":"zhang"},{$set:{"age":''}},{upsert:true})

db.person.update({"name":"zhang"},{$set:{"age":null}},{upsert:true})

$inc修改符

用于增长已有键的值,若是键不存在就建立,只能用于整形、长整型、浮点型。

//将name=zhang的记录的age键+10

db.person.update({"name":"zhang"},{$inc:{"age":10}},{upsert:true})

//将name=zhang的记录的age键-10

db.person.update({"name":"zhang"},{$inc:{"age":-10}},{upsert:true})

$unset修改符

删除键相似关系数据库的删除字段操做,要区别$set修改符的将键设空或者null值

db.person.update({"name":"zhang"},{$unset:{"age":1}})

$push修改符

若是数组已经存在,“$push”会向已有的数组末尾加入一个元素,要是没有就建立一个新的数组。注意:必须是数组才能加入新的值

db.person.update({"name":"zhang"},{$push:{"comments":{"email":"abc@qq.com","address":"beijing"}}});

//再插入一条comments

db.person.update({"name":"zhang"},{$push:{"comments":{"mark":"aaa"}}});

$each修改符

向数组中添加元素

db.axc.remove({})

db.axc.insert({"title":1,"list":[1,2,3]})

db.axc.find();

//向list数组中添加单个元素

db.axc.update({"title":1},{$push:{"list":4}})

//向list数组中添加多个元素

db.axc.update({"title":1},{$push:{"list":{$each:[6,7]}}});

db.axc.find();

$addToSet修改符

往数组集中插入元素时,若是元素存在就不插入;方法和$push同样,惟一的区别就是$push不会判断重复值,重复也能够插入。$addToSet也能够结合$each一块儿使用方法和$push同样能够同时往数组中插入多个元素而且若是元素存在则不插入。

db.axc.update({"title":1},{$addToSet:{"list":2}})

db.axc.update({"title":1},{$addToSet:{"list":{$each:[2,3,4]}}});

$pull修改符

匹配数组中的元素将匹配上的元素所有删除,注意只能对数组中的元素进行匹配

db.lists.insert({"title":1,"list":[1,2,3]});

db.lists.find();

//清除list数组中的元素2

db.lists.update({},{$pull:{"list":2}})

db.lists.find();

$pop修改符

从数组的末端或头删除一个元素,$pop:{"list":1}:从末尾删除一个元素;$pop:{"list":-1}:从开头删除一个元素

//向数组list中插入两个元素

db.lists.update({},{$push:{"list":{$each:[2,4]}}});

db.lists.find()

//从末尾删除元素

db.lists.update({},{$pop:{"list":1}});

//从开头删除元素

db.lists.update({},{$pop:{"list":-1}});

基于位置的数组修改方法

能够有两种方式来定位数组中的元素:

1.经过下标;数组的下标都是从0开始。

2.经过$定位操做符,

db.comment.insert({"title":1,"comments":[{"comment":"a","author":"chen","age":10},{"comment":"b","author":"wang","age":30},{"comment":"c","author":"zhang","age":40}]});

//将数组中的第一个列表的age值改为20

//方法1:

db.comment.update({},{$set:{"comments.0.age":20}});

//方法2:

db.comment.update({"comments.author":"chen"},{$set:{"comments.$.age":20}});

drop

删除test集合,注意drop后面的括号里面不须要带花括号

db.test.drop()

总结

 

 

 

 

 

备注:

    做者:pursuer.chen

    博客:http://www.cnblogs.com/chenmh

本站点全部随笔都是原创,欢迎你们转载;但转载时必须注明文章来源,且在文章开头明显处给明连接,不然保留追究责任的权利。

《欢迎交流讨论》

相关文章
相关标签/搜索