zoukankan      html  css  js  c++  java
  • mongodb 集合操作 (增删改查)

    1、插入:

        使用insert或save方法想目标集合插入一个文档:

        db.person.insert({"name":"ryan","age":30});

        使用batchInsert方法实现批量插入,它与insert方法非常类似,只是它接受的是一个文档数组作为参数。

     一次发送数十,数百乃至数千个文档会明显提高插入的速度。

        db.person.batchInsert([{"name":"ryan","age":30},{"name":"pitaya","age":2}]);

        如果在批量插入的过程中有一个文档插入失败,那么在这个文档之前的所有文档都会成功插入到集合中,而这个文档以及之后的所有文档全部插入失败。

     如果希望batchInsert忽略错误并且继续执行后续插入,可以使用continueOnError选项。shell并不支持这个选项,但所有的驱动程序都支持。

    2、更新:

        使用update方法来更新集合中的数据。update有四个参数,前两个参数是必须的。

        db.person.update({"name":"ryan"},{"$set":{"age":35}},true,true);

        第一个参数:查询文档,用于定位需要更新的目标文档。

        第二个参数:修改器文档,用于说明要对找到的文档进行哪些修改。

        第三个参数:true表示要使用upsert,即如果没有找到符合更新条件的文档,就会以这个条件和更新文档为基础创建一个新的文档。如果找到了匹配的文档,则正常更新。

        第四个参数:true表示符合条件的所有文档,都要执行更新。

        修改器:

        $set:用来指定一个字段的值。如果这个字段不存在,则创建它。对于更新而言,对符合更新条件的文档,修改执行的字段,不需要全部覆盖。

        db.person.update({"name":"ryan"},{"$set":{"age":35}},true,true);

        $inc:用来增加已有键的值,或者该键不存在就创建一个。对于投票等有变化数值的场景,这个会非常方便。

        db.person.update({"name":"ryan"},{"$inc":{"age":2}},true,true);//对符合name等于ryan的文档,age字段加2。

        $push:向已有数组末尾加入一个元素。

        db.person.update({"name":"ryan"},{"$set":{"language":["chinese"]}},true,true);//对符合name等于ryan的文档,添加一个language的数组

        db.person.update({"name":"ryan"},{"$push":{"language":"english"}},true,true);//给数组的末尾添加一个值。

        $addToSet:避免向数组插入重复的值。

        db.person.update({"name":"ryan"},{"$addToSet":{"language":"english"}},true,true);

        $each:与$push和$addToSet结合,一次给数组添加多个值。

        db.person.update({"name":"ryan"},{"$push":{"language":{"$each":["Japanese","Portuguese"]}}},true,true);

        db.person.update({"name":"ryan"},{"$addToSet":{"language":{"$each":["Japanese","Portuguese"]}}},true,true);

        $pop:可以从数组的任何一端删除元素。

        db.person.update({"name":"ryan"},{"$pop":{"language":1}},true,true);//从数组的末尾删除一个元素

        db.person.update({"name":"ryan"},{"$pop":{"language":-1}},true,true);//从数组的头部删除一个元素

        $pull:删除数组对应的值。全部删除。

        db.person.update({"name":"ryan"},{"$pull":{"language":"english"}},true,true);

    3、删除:

        使用remove方法删除集合中的数据。它可以接受一个查询文档作为可选参数。给定这个参数以后,只有符合条件的文档才能被删除。

       (删除数据是永久性的,不能撤销,也不能恢复)。

        db.person.remove({"name":"ryan"});//删除person集合中name字段的值等于ryan的所有文档。

        db.person.remove();//删除person集合中所有的文档。

        使用drop方法代替remove方法,可以大幅度提高删除数据的速度。但是这个方法不能指定任何限定条件。而且整个集合都会被删除,包括索引等信息,甚用!!

        db.person.drop();

    4、查询:

        MongoDB中使用find方法来进行查询。查询就是返回一个集合中文档的子集,子集的范围从0个文档到整个集合。find方法接受两个参数。

        第一个参数决定了要返回哪些文档,参数的内容是查询的条件。

        第二个参数来指定想要的键(字段)。第二个参数存在的情况:键的值为1代表要显示,为0代表不显示。“_id”默认显示,其他默认不显示。

        第二个参数不存在的情况:所有字段默认显示。

        db.person.find({"name":"ryan"},{"name":1});

     

        查询条件:

        $lt、$lte、$gt、$gte这四个,就是全部的比较操作符(没有$eq这个操作符),分别对应<、<=、>、>=。

        db.person.find({"age":{"$lt":10}});

        这里提供一段小脚本,插入10万条数据,做之后的测试用。

      1 for(var i=0;i<100000;i++){

      2     db.person.insert({"name":"ryan"+i,"age":i});

      3 }

        $in、$nin,用来查询一个键的多个值。

        db.person.find({"age":{"$in":[1,3]}});//查询age等于1或3的文档。

        db.person.find({"age":{"$nin":[1,3]}});//查询age不等于1或3的文档。

        $or,用来查询多个键的多个值。可以和$in等配合使用。

        db.person.find({"$or":[{"name":"ryan2"},{"age":3}]});//查询name等于ryan2   或者   age等于3的文档。

        $exists,查询的键对应是值是null的,默认会返回null和键不存在的文档。可以通过$exists来判断该键是否存在。

        db.person.find({"age":{"$in":[null],"$exists":true}});//查询age等于null,并且键是存在的文档。

        $where,用它可以在查询中执行任意的javascript,这样就能在查询中做(几乎)任何事情。为了安全起见,应该严格限制或者消除"$where"语句的使用。

        db.person.find({"$where":function(){

            ...;//这里可以是任意的javascript语句。

        }})

        游标:利用游标可以限制结果的数量,略过部分结果,根据任意键按任意顺序的组合对结果进行各种排序,或者是执行其他的一些强大的操作。

      1 var cursor = db.person.find();

      2 while(cursor.hasNext()){

      3     obj = cursor.next();

      4     ...;//这里可以做任何事情。 

      5 }

        常用的shell

        limit:只返回前面多少个结果。

        db.person.find().limit(2);//查询符合条件的文档,显示前两个文档。

        skip:跳过多少个结果后显示剩余的。

        db.person.find().skip(2);//查询符合条件的文档,显示跳过2个文档后剩余的所有文档。 

        sort:用于排序。接受一个对象(一组键值对)作为参数,键对应文档的键名,值代表排序的方向。

        排序的方向可以是1(升序)或者-1(降序)。如果指定了多个键,则按照这些键被指定的顺序逐个排序。

        db.person.find().sort({"name":1,"age":-1});//查询的结果,按照name升序,age降序来排序显示。

  • 相关阅读:
    Flutter form 的表单 input
    FloatingActionButton 实现类似 闲鱼 App 底部导航凸起按钮
    Flutter 中的常见的按钮组件 以及自 定义按钮组件
    Drawer 侧边栏、以及侧边栏内 容布局
    AppBar 自定义顶部导航按钮 图标、颜色 以及 TabBar 定义顶部 Tab 切换 通过TabController 定义TabBar
    清空路由 路由替换 返回到根路由
    应对ubuntu linux图形界面卡住的方法
    [转] 一块赚零花钱
    [转]在树莓派上搭建LAMP服务
    ssh保持连接
  • 原文地址:https://www.cnblogs.com/GtShare/p/7660584.html
Copyright © 2011-2022 走看看