• mongodb(四)


    Count+Distinct+Group
    数据库命令操作
    固定集合特性
    GridFS文件系统
    补充服务器端脚本

    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}}
    }})
    
    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;
            }
        },
        finalize:function(prev){
            prev.m = prev.name+" Math scores "+prev.m
        },
        condition:{m:{$gt:90}}
    }})
    
    db.persons.insert({
        name:"USPCAT",
        age:27,
        email:"2145567457@qq.com",
        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.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同时存在那分组有点麻烦这要如何解决呢?
    $keyf:function(doc){
    return {country:doc.counTry}
    },…..


    1.命令执行器runCommand
    1.1用命令执行完成一次删除表的操作
    db.runCommand({drop:"map"})
    {
    "nIndexesWas" : 2,
    "msg" : "indexes dropped for collection",
    "ns" : "foobar.map",
    "ok" : 1
    }
    2.如何查询mongoDB为我们提供的命令
    1.在shell中执行 db.listCommands()
    2.访问网址http://localhost:28017/_commands
    3.常用命令举例
    3.1查询服务器版本号和主机操作系统
    db.runCommand({buildInfo:1})
    3.2查询执行集合的详细信息,大小,空间,索引等……
    db.runCommand({collStats:"persons"})
    3.3查看操作本集合最后一次错误信息
    db.runCommand({getLastError:"persons"})

    1.固定集合概念


    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尾部游标概念
    这是个特殊的只能用到固定级和身上的游标,他在没有结果的时候
    也不回自动销毁他是一直等待结果的到来
    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的文件存储状态
    利用VUE查看


    集合查看
    db.fs.chunks.find() 和db.fs.files.find() 存储了文件系统的所有文件信息
    3.4查看文件内容
    C:Users hinkpad>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代码

  • 相关阅读:
    多线程2
    多线程1
    Mybatis动态代理开发
    Mybatis的mapper.xml文件也是要加文件头的
    ssm框架只使用mybatis配置sqlmapconfig.xml
    ssm整合之web.xml配置
    SpringMVC三大组件的配置
    spring开启注解配置
    如何开发 Sublime Text 2 的插件
    ASP.NET MVC 5改进了基于过滤器的身份验证
  • 原文地址:https://www.cnblogs.com/ecollab/p/7527197.html
Copyright © 2020-2023  润新知