mongoDB6-高级查询

1.Count+Distinct+Group

1.1 count

db.orderInfo.find({"totalAmount":100}).count();

1.2 distinct

db.runCommand({distinct:"orderInfo" , key:"totalAmount"}).values

//结果如下
/* 1 */
[
    null,
    100.0,
    200.0
]

1.3 group

1.3.1 语法

db.runCommand({group:{
        ns:集合名字,
        Key:分组的键对象,
        Initial:初始化累加器,
        $reduce:组分解器,
        Condition:条件,
        Finalize:组完成器
      }})

分组首先会按照key进行分组,每组的 每一个文档全要执行$reduce的方法,
他接收2个参数一个是组内本条记录,一个是累加器数据.

1.3.2 案例

查出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}}
}})   

1.3.2

在上一个基础上把没个人的信息链接起来写一个描述赋值到m上
finalize:function(prev){
prev.m = prev.name+” Math scores “+prev.m
}

2.数据库命令操作

2.1 runCommand

//删除数据库
db.runCommand({drop:"map"})
{
        "nIndexesWas" : 2,
        "msg" : "indexes dropped for collection",
        "ns" : "foobar.map",
        "ok" : 1
}

2.2 服务器常用命令

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

db.runCommand({buildInfo:1})

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

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

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

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

3.固定集合特性

3.1 概念

Cappend collection是性能出色的有着固定大小的集合,以LUR(Least Recently Used最近最少使用)规则
和插入顺序进行age-out(老化移出)处理,自动维护集合中对象的插入顺序,在创建时要预先指定大小,
如果空间用完,新添加的对象将会取代集合最旧的对像,永远保持最新的数据

3.2 固定特性

  • 固定集合默认是没有索引的就算是_id也是没有索引的
  • 由于不需分配新的空间他的插入速度是非常快的
  • 固定集合的顺是确定的导致查询速度是非常快的
  • 最适合的是应用就是日志管理

3.3 创建固定集合

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

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

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

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

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

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

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

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

3.5.1尾部游标概念

     这是个特殊的只能用到固定级和身上的游标,他在没有结果的时候
      也不回自动销毁他是一直等待结果的到来

4.GridFS文件系统

4.1.\ 概念

      GridFS是mongoDB自带的文件系统他用二进制的形式存储文件
      大型文件系统的绝大多是特性GridFS全可以完成

4.2 利用的工具

mongofiles

4.3 .使用GridFS

4.3.1 查看GridFS的所有功能

       cmdmongofiles

4.3.2 上传一个文件

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

4.3.3 查看GridFS的文件存储状态

  • 利用工具查看
  • 集合查看
    db.fs.chunks.find() 和db.fs.files.find() 存储了文件系统的所有文件信息

4.3.4查看文件内容

 C:\Users\mongodb\bin\mongofiles -d foobar get "filename.txt“
 工具可以查看,shell无法打开文件

4.3.5查看所有文件

 mongofiles -d foobar list

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

 mongofiles -d foobar delete 'filename.txt'

5.服务器端脚本

5.1.Eval

  • 服务器端运行eval
    db.eval(“function(name){ return name}”,”uspcat”)

5.2.Javascript的存储

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

  • 把变量加载到特殊集合system.js中
    db.system.js.insert({_id:name,value:”uspcat”})
  • 调用
    db.eval(“return name;”)
    System.js相当于Oracle中的存储过程,因为value不单单可以写变量
    还可以写函数体也就是javascript代码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值