zoukankan      html  css  js  c++  java
  • MongoDB教程之常用操作

    公司某些数据要用到MongoDB进行存储,主要目的是为了查询比较方便,此次可谓是混合数据库使用的首例了。

    在学习之前,要了解掌握一个非常重要的东西,那就是MongoDB与JavaScript的完美结合,嗯,这句话是非常重要的,后面慢慢体会,下面具体介绍MongoDB的常用操作。

    基础操作

    mongo          进入MongoDB命令行客户端

    cls            清除当前命令行客户端内容

    show dbs         列出所有的数据库

    show databases      列出所有的数据库

    use mldn         切换数据库,此处mldn只是随意取的数据库名称,此切换可以随意切换到没有创建的数据库中,一旦添加数据,此数据库会跟随创建。必须。

    db.dropDatabase()     删除当前数据库

    db.dropDatabase('mldn')    删除指定数据库

    db.createCollection('tmp')   创建集合,相当于数据库中创建表,非必须

    db.getCollection('tmp')     拿到集合,相当于拿到表在进行操作,非必须,学习时可省略

    show collections      查看所有集合,查看所有表

    db.tmp.drop()       删除名为tmp的集合(表)

    db.getCollection('tmp')    删除名为tmp的集合(表)

    增加、插入数据

    db.tmp.insert({json对象});//单条插入

    db.tmp.insert([{json对象},{}]);//批量插入

    //db.tmp.insert({姓名: “张三“,sex:1,age:19});

    删除

    db.tmp.remove({json对象,部分条件});

    //db.tmp.remove({age:19});

    查询

    db.tmp.find();        查询所有

    db.tmp.findOne();      查看一个

    查询核心语法:db.集合名称.find({查询条件}[,{设置显示的字段}])[.pretty()];//美化操作可选     

            //db.tmp.find({url:"mldn-14"},{_id:0}).pretty() //_id对应的值为0不显示,为1表示显示

            // db.tmp.findOne({url:"mldn-14"},{_id:0})//无pretty()

    关系运算

    大于($gt)、小于($lt)、大于等于($gte)、小于等于($lte)、等于($eq)

    //db.tmp.find({age:{"$gt":1,"$lt":99}}).pretty();

    不是($ne)

    //db.tmp.find({age:{“$ne”:99}});

    逻辑运算

    与($and)、或($or)、非($not、$nor)、

    //db.tmp.find({age:{‘$gte’:19,’$lte’:20}}).pretty();

    //db.tmp.find({age:{‘$not’:19}})(错误)

    //db.tmp.find({age:{‘$ne’: 19}});

    //db.tmp.find({‘$or’:[{age:{‘$gt’:19}},{score:[‘$lt’:90]}]})//或者

    //db.tmp.find({‘$nor’:[{age:{‘$gt’:19}},{score:[‘$lt’:90]}]})//或者取反

    求模($mod)

    //db.tmp.fiind({age:{‘$mod’:[20,1]}})//年龄除以20余1的数据 求模

    范围查询

    在范围之中($in)、不在范围之中($nin)

    // db.tmp.find({age:{'$in':[1,2,3,4,5]}})在范围

    // db.tmp.find({age:{'$nin':[1,2,3,4,5]}})不在范围

    数组查询

    //db.tmp.insert({name:'大神11',age:11,course:['语文','数学','英语']})

    //db.tmp.insert({name:'大神11',age:11,course:['数学','英语']})

    //db.tmp.insert({name:'大神11',age:11,course:['语文','英语']})

    数组操作符:$all、$size、$sliice、$elemMatch

    //同时参加语文和数学的人

    //db.tmp.find({'course':{'$all':['语文','数学']}})//查询课程中包含语文和数学的

    //db.tmp.find({name:{'$all':['大神11']}})//查询名字为大神11的

    数组使用索引操作

    //db.tmp.find({'course.1':'英语'})//查询课程数组索引为1的课程为英语的

    数组长度查询

    //db.tmp.find({'course':{'$size':2}})//查询课程选择了两门的

    //db.tmp.find({'course':{'$size':2}},{course:{'$slice':[1,1]}})返回数组指定长度数据

    //[1,1] //从数组1开始,长度为1

    嵌套查询

    //db.tmp.insert({name:'11',age:11,course:['语文','数学','英语'],parents:[{name:'father',age:50,job:'工人'},{name:'mother',age:50,job:'工人2'}]})

    //db.tmp.insert({name:'13',age:11,course:['数学','英语'],parents:[{name:'father',age:52,job:'处长'},{name:'mother',age:46,job:'工人aa'}]})

    //db.tmp.insert({name:'12',age:11,course:['语文','英语'],parents:[{name:'father',age:53,job:'局长'},{name:'mother',age:30,job:'工人啊啊'}]})

    //db.tmp.find({age:{'$gte':11},parents:{'$elemMatch':{'job':'局长'}}}).pretty();

    判断某个字段是否存在 ($exists)

    //db.tmp.find({age:{'$gte':11},parents:{'$exists':true}});//查询具有parents值的对象

    //db.tmp.find({age:{'$gte':11},parents:{'$exists':false}});//查询不具有parents的对象

    条件过滤 ($where)不能使用到索引,这个是JavaScript操作。

    //db.tmp.find({'$where':'this.age>=11'});

    //db.tmp.find(‘this.age>=11’)//where 的简化

    // db.tmp.find({‘$where’:function(){return this.age>=11;}})

    // db.tmp.find(function(){return this.age>=11;})

    // db.tmp.find({'$and':[{'$where':'this.age>=11'},{'$where':'this.age<21'}]})

    正则查询

    正则使用Perl兼容的额正则表达式形式。

    基础语法:{key:正则标记}

    完整语法:{key:{‘$regex’:正则标记,’$options’:选项}}

    options的值

           i:忽略字母大小写

           m:多行查找

           x:空白字符串除了被转义的,或在字符类中意外的完全忽略

           s:匹配所有的字符(圆点、‘.’),包括换行呢而

    如果直接诶使用(JavaScript),那么只能使用i和m,而x和s则必须使用’$regex’

    //db.tmp.find({name:/神/}) // like ‘%神%’

    // db.tmp.find({name:/a/i})   // like ‘%a%’ or like ‘%A%’

    // db.tmp.find({name:{'$regex':/神/}})

    // db.tmp.find({name:{'$regex':/神/}})

    // db.tmp.find({name:{'$regex':/a/,'$options':'i'}})

    MongoDB中的正则与java的正则有区别。

    排序

    排序函数($sort())、升序(1)、降序(-1)

    自然排序,按照数据保存的先后排序($natural)

    //db.tmp.find().sort({age:1}).pretty();

    // db.tmp.find().sort({'$natural':-1}).pretty();

    分页

    skip(n)跳过多少条记录

    limit(n)每次取多少条记录

    //db.tmp.find().skip(0).limit(5).sort({'age':-1}).pretty();

    count()查询总数

    //db.tmp.find({条件}).count();

    //db.tmp.count({条件},{参数});

           参数:    limit:限制最大数量

                         skip:跳过数量

                         hint:索引名称

                         maxTimeMS:允许查询的最大时间,单位ms

                         readConcern:读取级别

    数据更新

    update():db.集合.update(更新条件,新的对象数据(更新操作符),upsert,multi);

                  upsert:如果更新的数据不存在,则增加一条记录(true为增加,false为不增加)

                  multi:表示是否只更新满足条件的第一行记录。如果设置为false,只更新第一条记录,为true,更新所有满足条件的记录。

           需要配合 $set 使用

    //db.tmp.update({age:11},{score:100},false,false); //出错啦,插入了一条记录

    //db.tmp.update({age:6},{'$set':{score:98}},true,true);//插入了一条记录

    //db.tmp.update({age:11},{'$set':{score:100}},false,false); 更新了第一条

    //db.tmp.update({age:11},{'$set':{score:99}},true,false);//更新了第一条

    //db.tmp.update({age:11},{'$set':{score:99}},true,true);//更新了所有

    save():能更新能保存,但需要使用到id才可以

    // db.tmp.save({age:6},{score:50}); 无效

    // db.tmp.save({age:6},{'$set':{score:50}}); 无效

    // db.tmp.save({ "_id" : ObjectId("5b98f7b93ce9c84291fee093"),score:50});//根据id修改,并且是所有数据全部覆盖

    修改器

    $inc:主要针对一个数字字段,增加某个数字字段的数据内容

           基本语法:db.集合.update({条件},{‘$inc’:{key:changeValue}})

    //db.tmp.update({age:11},{'$inc':{score:99}},true,true);给满足条件的值+99分

    $set:进行内容的重新设置

           基本语法:db.集合.update({条件},{‘$inc’:{key:value}})

           // db.tmp.update({age:11},{'$set':{score:99}},true,true);//更新了所有分值为99分

    $unset:删除某个成员的内容

           基本语法:db.集合.update({条件},{‘$unset’:{key:1}})

           // db.tmp.update({age:11},{'$unset':{score:99}},true,true);//成功删除满足条件的分数字段

    $push:相当于将内容追加到指定的成员之中(基本上是数组),追加的内容为数组成员,每次只能追加一个值。如果没有对应字段,则会添加对应的字段

           基本语法:db.集合.update({条件},{‘$push’:{key:value}})

           //db.tmp.update({age:11},{'$push':{score:99}},true,true);//如果已经存在,但不是数组,则不会追加

           // db.tmp.update({age:11},{'$push':{score:[1,3,5,7]}},true,true); //会将整个数组作为数组值进行追加,需要注意。

    $pushAll:与 $push 类似,可以一次追加多个内容到数组里面。mongoDB在3.6已经取消了此功能,将此功能合并到了 $push 中。

           基本语法:db.集合.update({条件},{‘$push’:{key:[数组成员]}})

           // db.tmp.update({age:11},{'$pushAll':{score:[1,3,5,7]}});

    $addToSet:想数组里面增加新的内容,只有这个内容不存在才会增加

           基本语法:db.集合.update({条件},{‘$addToSet’:{key:value}})

    //db.tmp.update({age:11},{'$addToSet':{score:1}},true,true);

    $pop:删除数组内的数据

           基本语法:db.集合.update({条件},{‘$pop’:{key:value}}),内容如果设置为-1表示删除第一个,如果是1表示删除最后一个。

           //db.tmp.update({age:11},{'$pop':{score:1}},true,true);//删除最后一个

    $pull:从数组内删除一个指定内容的数据

           基本语法:db.集合.update({条件},{‘$pull’:{key:value}}),进行数据比对,如果能对比上,则删除

           // db.tmp.update({age:11},{'$pull':{score:1}},true,true);//跟单个值

    $pullAll:一次删除多个内容

           基本语法:db.集合.update({条件},{‘$pullAll’:{key:value}})

           // db.tmp.update({age:11},{'$pullAll':{score:[1,3,5,7]}},true,true);//跟数组

    $rename:为成员名称重命名

           基本语法:db.集合.update({条件},{‘$rename’:{key:value}})

          

    删除数据

    remove({条件},option):删除对应的数据,条件支持正则

           option:false,删除所有满足条件的数据,true,只删除第一个满足条件的数据

           基本语法:db.集合.remove({条件},是否删除第一个);

           //db.tmp.remove({});//删除所有

           //db.tmp.drop();

          

    游标

    find():返回了一个游标

           判断是否有下一行数据:hasNext()

           取出当前数据:next()

           // var cursor=db.tmp.find();while(cursor.hasNext()){var doc=cursor.next();print(doc);}

           // var cursor=db.tmp.find();while(cursor.hasNext()){var doc=cursor.next();printjson(doc);}

  • 相关阅读:
    nginx概念
    leetcode——109.有序链表转换二叉搜索树
    leetcode——95.不同的二叉搜索树II
    leetcode——106.从中序和后序遍历序列构造二叉树
    leetcode——117. 填充每个节点的下一个右侧节点指针 II
    leetcode——99.恢复二叉搜索树
    leetcode——103.二叉树的锯齿形层次遍历
    leetcode——107.二叉树的层次遍历II
    leetcode——79.单词搜索
    leetcode——37.解数独
  • 原文地址:https://www.cnblogs.com/maomao999/p/9641340.html
Copyright © 2011-2022 走看看