mongoDB第五讲

Count+Distinct+Group

1.Count

    请查询persons中美国学生的人数.

     db.persons.find({country:"USA"}).count()

2.Distinct

     请查询出persons中一共有多少个国家分别是什么.

      db.runCommand({distinct:"persons“, key:"country"}).values

3.Group

      语法:

      db.runCommand({group:{

             ns:集合名字,

             Key:分组的键对象,

             Initial:初始化累加器,

             $reduce:组分解器,

             Condition:条件,

             Finalize:组完成器

      }})

      分组首先会按照key进行分组,每组的 每一个文档全要执行$reduce的方法,

      他接收2个参数一个是组内本条记录,一个是累加器数据.

 3.1请查出persons中每个国家学生数学成绩最好的学生信息(必须在90以上)

db.runCommand({group:{

ns:"persons",

key:{"country":true},

initial:{m:0},

$reduce:function(doc,prev){

if(doc.m > prev.m){

prev.m = doc.m;

prev.name = doc.name;

prev.country = doc.country;

}

},

condition:{m:{$gt:90}}

}})  

3.2在3.1要求基础之上把每个人的信息链接起来写一个描述赋值到m上

finalize:function(prev){

 prev.m = prev.name+" Math scores "+prev.m

}

4.用函数格式化分组的键

  4.1如果集合中出现键Counrty和counTry同时存在

db.persons.insert({
 name:"USPCAT",
 age:27,
 email:"[email protected]",
 c:89,m:100,e:67,
 counTry:"China",
 books:["JS","JAVA","EXTJS","MONGODB"]
})

那分组有点麻烦这要如何解决呢?

 db.runCommand({group:{
 ns:"persons",
 $keyf:function(doc){
  if(doc.counTry){
   return {country:doc.counTry}
  }else{
   return {country:doc.country}
  }
 },
 initial:{m:0},
 $reduce:function(doc,prev){
  if(doc.m > prev.m){
   prev.m = doc.m;
   prev.name = doc.name;
   if(doc.country){
    prev.country = doc.country;
   }else{
    prev.country = doc.counTry;
   }
  }
 },
 finalize:function(prev){
  prev.m = prev.name+" Math scores "+prev.m
 },
 condition:{m:{$gt:90}}
}})

数据库命令操作

1.命令执行器runCommand

  1.1用命令执行完成一次删除表的操作

db.runCommand({drop:"map"})

{

       "nIndexesWas" : 2,

       "msg" : "indexes dropped forcollection",

       "ns" : "foobar.map",

       "ok" : 1

}

2.如何查询mongoDB为我们提供的命令 

        1.在shell中执行 db.listCommands()

        2.访问网址http://localhost:28017/_commands,需要先通过

     mongod --dbpath d:\app\mongodata --rest命令打开简单的rest API

3.常用命令举例

         3.1查询服务器版本号和主机操作系统

        db.runCommand({buildInfo:1})   

         3.2查询执行集合的详细信息,大小,空间,索引等……

        db.runCommand({collStats:"persons"})

         3.3查看操作本集合最后一次错误信息

        db.runCommand({getLastError:"persons"})

固定集合特性

2.固定特性

       2.1固定集合默认是没有索引的就算是_id也是没有索引的

       2.2由于不需分配新的空间他的插入速度是非常快的

       2.3固定集合的顺是确定的导致查询速度是非常快的

       2.4最适合的是应用就是日志管理

3.创建固定集合

       3.1创建一个新的固定集合要求大小是100个字节,可以存储文档10个

            db.createCollection("mycoll",{size:100,capped:true,max:10})

        3.2把一个普通集合转换成固定集合

             db.runCommand({convertToCapped:”persons”,size:100000})

4.反向排序,默认是插入顺序排序.

        4.1查询固定集合mycoll并且反响排序

             db.mycoll.find().sort({$natural:-1})

5.尾部游标,可惜shell不支持java和php等驱动是支持的

        5.1尾部游标概念

             这是个特殊的只能用到固定集合身上的游标,他在没有结果的时候

             也不回自动销毁,而是一直等待结果的到来

GridFS文件系统

1.概念

          GridFS是mongoDB自带的文件系统他用二进制的形式存储文件

          大型文件系统的绝大多是特性GridFS全可以完成

2.利用的工具mongofiles.exe

3.使用GridFS

          3.1查看GridFS的所有功能

          cmd:mongofiles

          3.2上传一个文件

           mongofiles -d foobar -l"E:\a.txt" put "a.txt“

          3.3查看GridFS的文件存储状态

                集合查看

                db.fs.chunks.find() 和db.fs.files.find() 存储了文件系统的所有文件信息

3.4查看文件内容

    E:\>mongofiles -d foobar get "a.txt“

    VUE可以查看,shell无法打开文件

3.5查看所有文件

    mongofiles -d foobar list

3.5删除已经存在的文件VUE中操作

    mongofiles -d foobar delete ‘a.txt‘

服务器端脚本

1.Eval

    1.1服务器端运行eval

          db.eval("function(name){return name}","uspcat")

2.Javascript的存储

    2.1在服务上保存js变量活着函数共全局调用

         1.把变量加载到特殊集合system.js中

            db.system.js.insert({_id:name,value:”uspcat”})

         2.调用

             db.eval("return  name;")

System.js相当于Oracle中的存储过程,因为value不单单可以写变量

还可以写函数体也就是javascript代码

 

mongoDB第五讲,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。