zoukankan      html  css  js  c++  java
  • MongoDB 笔记之 聚合

    返回集合中的文档数量

    db.user.count()

    同样,还可以为 count 添加查询条件

    如:

    db.user.count({"name":"jack"});

    返回指定键所有不同的值

    db.runCommand({"distinct": "user","key":"name"})

    user 是集合, name 是键,功能同 关系型数据库的 distinct 一样,不多说

    group分组                       

    先举个例子吧,

    所有的数据:

    { "_id" : ObjectId("50c021d93a76cbcc77ae7411"), "name" : "tom", "sex" : "Male", "score" : "60" }
    { "_id" : ObjectId("50c0222b3a76cbcc77ae7412"), "name" : "jack", "sex" : "Male", "score" : "100" }
    { "_id" : ObjectId("50c022603a76cbcc77ae7413"), "name" : "lucy", "sex" : "Female", "score" : "90" }
    { "_id" : ObjectId("50c022843a76cbcc77ae7414"), "name" : "mark", "sex" : "Male", "score" : "84" }
    { "_id" : ObjectId("50c022a23a76cbcc77ae7415"), "name" : "mari", "sex" : "Female", "score" : "76" }

    假设:根据性别分组,并且找出男女中分数最高的人,并且排除 "jack" ,因为老师认定他考试作弊,被开除了。

    第一种做法:

    db.user.group(
    ..  {key:{sex:true},
    ..  initial:{score:0},
    ..  $reduce:function(doc,prev){
    ..  if(Number(doc.score)>Number(prev.score)){
    ..  prev.score = doc.score;
    ..  prev.name = doc.name
    ..  }},
    ..  condition:{name:{$ne:"John"}}
    .. })

    第二种做法:

     db.runCommand({group:
    .. {ns:"user",
    .. key:{sex:true},
    .. initial:{score:0},
    .. $reduce:function(doc,prev){
    .. if(Number(doc.score)>Number(prev.score)){
    .. prev.score = doc.score
    .. prev.name = doc.name
    .. }},
    .. condition:{name:{$ne:"John"}}
    .. }});

    ns:就是集合名称,nameSpace       

    key:分组的字段      

    initial:每个分组都会有一个 initial 初始文档,他作为传递每个分组最后的值,每一组的所有成员都会使用这个累加器,所以改变会保留。

    $reduce:每个文档都会调用一次这个函数,该函数传递两个参数,第一个参数为当前文档对象,第二个为累加器对象,也就是上面说的那个,我们这里是每次比较分数的值,哪个分数高,就把哪个放到累加器中,可以说,累加器对象里面有什么数据,最后的结果就是什么数据,再加上分组的数据。 在比较的时候我们使用了Number() js 函数,是为了让他做数学大小的比较

    condition:就是分组之前的筛选条件了。

    group 使用完成器,

    顾名思义,就是group 分组完成后调用的,相当于 关系型数据库的 having ,使用时只需将 finalize 键放进去,根据需求做处理就可以了






  • 相关阅读:
    JNDI技术扩展
    多数据源配置
    单数据源配置
    配置文件初始化异常Configuration system failed to initialize
    控制台应用程序中托管Web API 1.0,不需要IIS。
    WPF界面卡顿简要分析和处理
    异常System.AccessViolationException的处理方式
    logstash 启动报错
    常用命令总结
    mac 安装kafka扩展
  • 原文地址:https://www.cnblogs.com/moonciki/p/8145868.html
Copyright © 2011-2022 走看看