zoukankan      html  css  js  c++  java
  • MonogoDb学习笔记

    最近重新学习了Mongodb,总结下了Monogodb的用法,以便以后查看。

    备份:
       mongodump -h 127.0.0.1 -d spm -o /home/liuwei
    还原:
       mongorestore -h dbhost -d dbname -directoryperdb /home/liuwei/spm
    显示所有数据库:
      show dbs;
    创建数据库: 如果数据库不存在,则创建数据库,否则切换到指定数据库。
      use dbname;
    删除数据库:
      db.dropDatabase();
    创建集合: capped 是否固定集合 配合size autoindexid 自动为_id添加索引 max集合中包含文档的最大数量
      db.createCollection('student');
      db.createCollection("mycol", { capped : true, autoIndexId : true, size : 
       6142800, max : 10000 } )
    删除集合:
     db.student.drop(); 
    显示所有集合
    show collections;
    插入文档:
     db.student.insert({code:"201517020119",name:"zhangsan",age:20});
    删除文档:
     db.student.remove({code:"201517020119"});
    更新文档:
    db.update({条件},{更改的值key:value},如果不存在是否新建(true|false-默认),只找匹配的第一条记录-默认false);
    
    $inc
     db.student.update({"code":"111"},{"$inc":{"age":1}});
     
    $set 没有就新建
     db.student.update({"code":"111"},{"$set":{"score":100}})
     
    $unset 删除字段
     db.student.update({"code":"112"},{"$unset":{"score":11}}) 
    
    $rename  { $rename : { old_field_name : new_field_name } }
    
    $push 往集合的数组中插入数据
     db.student.update({"code":"111"},{"$push":{"books":"数据结构"}})
    
    $pushAll
     db.student.update({"code":"111"},{"$pushAll":{"books":["数据结构","语文"]}})
     
    $addToSet 往集合的数组中插入数据 --避免重复
     db.student.update({"code":"111"},{"$addToSet":{"books":["数据结构"]}})
     
    $pop 删除制定位置的元素 -1:头部  1:末尾
     db.student.update({"code":"111"},{"$pop":{"books":-1}})
     
    $pull 删除指定名称的数据  
     db.student.update({"code":"111"},{"$pull":{"books":"数据结构"}})
    
    $gt >  $gte >=   $lt <   $lte <=   $ne !=
    
    $in
    db.student.find({"code":{"$in":["111","112"]}}); 
    
    $nin
    db.student.find({"code":{"$nin":["111","112"]}}); 
    
    $or
    db.student.find({"$or":[{"code":"111"},{"code":"112"}]}); 
    
    $mod [n,m] *%n==m
    db.student.find({"age":{"$mod":[10,7]}}); 
    
    $not
     db.student.find({"age":{"$not":{"$mod":[10,7]}}});
    
     正则查询  i表示忽略大小写
     db.student.find({"name":/z/i});
     
    $all 满足数组所有元素
     db.student.find({"books":{"$all":["数据结构","语文"]}}); 
    
    $elemMatch 匹配数组的内嵌文档
    db.student.find({"books":{"$elemMatch":{"name":"语文","auth":"zhangsan"}}})
    
    $size 数组的大小
     db.student.find({"books":{"$size":2}});
    
    $slice 返回数组指定记录条数 [10,3] 返回11~13  -1从后计算
     db.student.find({},{"books":{"$slice":1}}).pretty();
     
    游标:
      var students = db.student.find();
      while(students.hasNext()){
       print(students.next().code);
      }
    
    sort() 1从小到大   -1 从大到小
      db.student.find().sort("code":1);
    
    索引:
      ①创建索引  1按照升序  -1 降序
       db.student.ensureIndex({"code":1});
       db.student.ensureIndex({"code":1},{"unique":true}); //唯一索引
      db.student.ensureIndex({"code":1},{"dropDups",true});     Boolean    在建立唯一索引时是否删除重复记录,指定 true 创建唯一索引。默认值为 false.
       db.student.ensureIndex({"name":1},{"name":"ind_name"});  //制定名称
      ②删除索引  -- db.student.dropIndex( "indexName" ) or db.student.dropIndex( { "indexKey" : 1 } )
       db.student.dropIndex(name); 
       db.studeng.dropIndexs(); // 删除全部索引
       
       
    数量查询 .count() 
    db.student.count({"code":"111"});
    
    查询分页:
    db.student.find().limit(2),skip(1);
    去除重复数据 distant
     db.student.distinct("code")  --> [112,113]
    aggregate
       一、group
            1、按照code分组  在返回每一组的总个数
          db.student.aggregate([{$group : {_id : "$code", "age_count" : {"$sum" : 1}}}])
        2、按照code分组  在返回每一组中age的总和
          db.student.aggregate([{$group : {_id : "$code", "age_sum" : {"$sum" : "$age"}}}])
         3、按照code分组  在返回每一组中age的总和 并升序排序    
         db.student.aggregate([{$group : {_id : "$code", "age_max" : {"$max" : "$age"}}},{$sort: {"_id": 1}}])
        总结:$sum $max $min $avg $first $last
       etc:
        $project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
          db.article.aggregate( { $project : {  "code" : 1 ,  "name" : 1}});
        $match:用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。
        db.articles.aggregate( [  { $match : { score : { $gt : 70, $lte : 90 } } }, { $group: { _id: null, count: { $sum: 1 } } }] );
    
    
        $limit:用来限制MongoDB聚合管道返回的文档数。
        $skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。
        db.article.aggregate( { $skip : 5 });
        $unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
        $group:将集合中的文档分组,可用于统计结果。
        $sort:将输入文档排序后输出。
        $geoNear:输出接近某一地理位置的有序文档
        
    
    
    
    按日、按月、按年、按周、按小时、按分钟聚合操作如下:
    
    db.getCollection('m_msg_tb').aggregate(
    [
        {$match:{m_id:10001,mark_time:{$gt:new Date(2017,8,0)}}},
        {$group: {
           _id: {$dayOfMonth:'$mark_time'},
            pv: {$sum: 1}
            }
        },
        {$sort: {"_id": 1}}
    ])    
    $dayOfYear: 返回该日期是这一年的第几天(全年 366 天)。
    $dayOfMonth: 返回该日期是这一个月的第几天(1到31)。
    $dayOfWeek: 返回的是这个周的星期几(1:星期日,7:星期六)。
    $year: 返回该日期的年份部分。
    $month: 返回该日期的月份部分( 112)。
    $week: 返回该日期是所在年的第几个星期( 053)。
    $hour: 返回该日期的小时部分。
    $minute: 返回该日期的分钟部分。
    $second: 返回该日期的秒部分(以0到59之间的数字形式返回日期的第二部分,但可以是60来计算闰秒)。
    $millisecond:返回该日期的毫秒部分( 0999)。
    $dateToString: { $dateToString: { format: , date: } }。
    
    
    文档引用:
       {
       "_id":ObjectId("52ffc33cd85242f436000001"), 
       "address_ids": [
          ObjectId("52ffc4a5d85242602e000000"),
          ObjectId("52ffc4a5d85242602e000001")
       ]
      }
    var result = db.users.findOne({"name":"Tom Benzamin"},{"address_ids":1})
    var addresses = db.address.find({"_id":{"$in":result["address_ids"]}})
    
    
    
    explain()
     
        indexOnly: 字段为 true ,表示我们使用了索引。
        cursor:因为这个查询使用了索引,MongoDB 中索引存储在B树结构中,所以这是也使用了 BtreeCursor 类型的游标。
         如果没有使用索引,游标的类型是 BasicCursor。这个键还会给出你所使用的索引的名称,你通过这个名称可以查看当前数据库下的system.indexes集合
         (系统自动创建,由于存储索引信息,这个稍微会提到)来得到索引的详细信息。
        n:当前查询返回的文档数量。
        nscanned/nscannedObjects:表明当前这次查询一共扫描了集合中多少个文档,我们的目的是,让这个数值和返回文档的数量越接近越好。
        millis:当前查询所需时间,毫秒数。
        indexBounds:当前查询具体使用的索引。

    还在继续完善。。。

  • 相关阅读:
    JavaEE——SpringMVC(11)--拦截器
    JavaEE——SpringMVC(10)--文件上传 CommonsMultipartResovler
    codeforces 460A Vasya and Socks 解题报告
    hdu 1541 Stars 解题报告
    hdu 1166 敌兵布阵 解题报告
    poj 2771 Guardian of Decency 解题报告
    hdu 1514 Free Candies 解题报告
    poj 3020 Antenna Placement 解题报告
    BestCoder5 1001 Poor Hanamichi(hdu 4956) 解题报告
    poj 1325 Machine Schedule 解题报告
  • 原文地址:https://www.cnblogs.com/LIUWEI123/p/9350216.html
Copyright © 2011-2022 走看看