zoukankan      html  css  js  c++  java
  • MongoDB入门系列(二):Insert、Update、Delete、Drop

    概述  

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

    环境:

    Version:3.4

    insert

    insert()基本语法如下:

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

    1.单条插入

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

    2.多条插入

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

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

    3.错误的语法:

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

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

    容易误导的地方:

    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

    本站点所有随笔都是原创,欢迎大家转载;但转载时必须注明文章来源,且在文章开头明显处给明链接,否则保留追究责任的权利。

    《欢迎交流讨论》

  • 相关阅读:
    monkey测试===Monkey测试结果分析(系列三)转
    monkey测试===Monkey测试策略(系列二)转
    Java数据结构——二叉树
    Java排序算法——快速排序
    Java排序算法——归并排序
    Java递归算法——汉诺塔问题
    Java递归算法——二分查找
    Java递归算法——变位字
    Java递归算法——阶乘
    Java递归算法——三角数字
  • 原文地址:https://www.cnblogs.com/chenmh/p/8144798.html
Copyright © 2011-2022 走看看