• 【MongoDB初识】-其他操作


    又发现一种查询写法$where
    db.class.find({$where:function(){return this.stuCount==10}})
    排重
    db.class.distinct("stuCount")

    一、MapReduce(摘录MongoDB实战)

    MongoDB 的 MapReduce 相当于 sql 中的"group by", 所以在 MongoDB 上使用 Map/Reduce
    进行并行"统计"很容易。
    使用 MapReduce 要实现两个函数 Map 函数和 Reduce 函数,Map 函数调用 emit(key, value),
    遍历collection中所有的记录, 将key与value传递给Reduce函数进行处理。 Map函数和Reduce
    函数可以使用 JavaScript 来实现,可以通过 db.runCommand 或 mapReduce 命令来执行一个
    MapReduce 的操作:

    db.runCommand(
    { mapreduce : <collection>,
    map : <mapfunction>,
    reduce : <reducefunction>
    [, query : <query filter object>]
    [, sort : <sorts the input objects using this key. Useful for optimization, like sorting by the
    emit key for fewer reduces>]
    [, limit : <number of objects to return from collection>]
    [, out : <see output options below>]
    [, keeptemp: <true|false>]
    [, finalize : <finalizefunction>]
    [, scope : <object where fields go into javascript global scope >]
    [, verbose : true]
    }
    );

    参数说明:
    mapreduce: 要操作的目标集合。
    map: 映射函数 (生成键值对序列,作为 reduce 函数参数)。
    reduce: 统计函数。
    query: 目标记录过滤。
    sort: 目标记录排序。
    limit: 限制目标记录数量。
    out: 统计结果存放集合 (不指定则使用临时集合,在客户端断开后自动删除)。
    keeptemp: 是否保留临时集合。
    finalize: 最终处理函数 (对 reduce 返回结果进行最终整理后存入结果集合)。
    scope: 向 map、reduce、finalize 导入外部变量。
    verbose: 显示详细的时间统计信息

    首先准备些数据

    db.students.insert({classid:2, age:16, name:'Lily'})
    db.students.insert({classid:2, age:9, name:'Tony'})
    db.students.insert({classid:2, age:19, name:'Harry'})
    db.students.insert({classid:2, age:13, name:'Vincent'})
    db.students.insert({classid:1, age:14, name:'Bill'})
    db.students.insert({classid:2, age:17, name:'Bruce'})
    db.students.insert({classid:1, age:14, name:'Tom'})
    db.students.insert({classid:1, age:12, name:'Jacky'})

    1、Map 函数必须调用 emit(key, value) 返回键值对,使用 this 访问当前待处理的 Document。

    map=function(){emit(this.classid,1)}

    value 可以使用 JSON Object 传递 (支持多个属性值)。例如:
    emit(this.classid, {count:1})

    map=function(){emit(this.classid,{count:1})}

    2、Reduce 函数接收的参数类似 Group 效果,将 Map 返回的键值序列组合成 { key, [value1,
    value2, value3, value...] } 传递给 reduce。

    reduce=function(key,values){
    var x=0;
    values.forEach(function(v){x+=v});
    return x;
    }

    Reduce 函数对这些 values 进行 "统计" 操作,返回结果可以使用 JSON Object。

    3、Result

    res=db.runCommand({
    mapReduce:"students",
    map:map,
    reduce:reduce,
    out:"students_res"
    });

    mapReduce() 将结果存储在 "students_res" 表中。

    4、Finalize

    f = function(key, value) { return {classid:key, count:value}; }

    5、Options

    > res = db.runCommand({
    ... mapreduce:"students",
    ... map:m,
    ... reduce:r,
    ... out:"students_res",
    ... finalize:f,
    ... query:{age:{$lt:10}}
    ... });

    只取年龄大于10的。

     

        result: "存放的集合名“;

           input:传入文档的个数。

           emit:此函数被调用的次数。

           reduce:此函数被调用的次数。

           output:最后返回文档的个数。

    ---------------------------------------------------------------------------------------------------------------------------------

    最后还是感觉这样理解更方便

      mapReduce其实是一种编程模型,用在分布式计算中,其中有一个“map”函数,一个”reduce“函数。

       ① map:

              这个称为映射函数,里面会调用emit(key,value),集合会按照你指定的key进行映射分组。

       ② reduce:

             这个称为简化函数,会对map分组后的数据进行分组简化,注意:在reduce(key,value)中的key就是

          emit中的key,vlaue为emit分组后的emit(value)的集合,这里也就是很多{"count":1}的数组。

       ③ mapReduce:

              这个就是最后执行的函数了,参数为map,reduce和一些可选参数

  • 相关阅读:
    Windows 10 字体替换
    Windows 任务栏增加秒显示
    CCProxy v8.0 代理服务器
    Git RPM软件包 && 源码包
    Google Chrome 浏览器最新版本 71.0.3578.98(正式版本) (64 位)
    Linux 查询公网出口IP
    Windows 10 Enterprise LTSC做Windows To Go蓝屏无法进入系统
    Nginx编译./configure翻译
    Windows 10 快捷键
    JDBC连接MySQL
  • 原文地址:https://www.cnblogs.com/lb12081116/p/4863925.html
Copyright © 2020-2023  润新知