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:当前查询具体使用的索引。

    还在继续完善。。。

  • 相关阅读:
    join()方法的使用
    synchronized关键字
    voliatle关键字
    一.线程概述
    NIO demo
    同步阻塞I/O
    Ubuntu16.04.1 安装Nginx
    垃圾收集
    如何从头开始安装 wordpress
    centos 6 安装 gnu c++ 等开发工具
  • 原文地址:https://www.cnblogs.com/LIUWEI123/p/9350216.html
Copyright © 2011-2022 走看看