`
bigboy
  • 浏览: 169944 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

MongoDB 聚合

 
阅读更多
1.count()函数返回集合中文档的数量
2.distinct找出给定键的所有不同的值。
> db.users.insert({"name":"Ada","age":20})
> db.users.insert({"name":"Fred","age":35})
> db.users.insert({"name":"Susan","age":60})
> db.users.insert({"name":"Andy","age":35})
> db.runCommand({"distinct":"users","key":"age"})
{
        "values" : [
                20,
                35,
                60
        ],
        "stats" : {
                "n" : 4,
                "nscanned" : 4,
                "nscannedObjects" : 4,
                "timems" : 0
        },
        "ok" : 1
}
3.group选定分组所依据的键,而后将集合依据选定键值的不同分成若干组,然后通过聚合每一组内的文档,产生一个结果文档。
> db.users.insert({"name":"Ada","age":34,"dept":"A"})
> db.users.insert({"name":"Cada","age":24,"dept":"A"})
> db.users.insert({"name":"Eva","age":15,"dept":"A"})
> db.users.insert({"name":"Yousg","age":15,"dept":"B"})
> db.users.insert({"name":"Tesg","age":51,"dept":"B"})
> db.users.insert({"name":"Gdsg","age":21,"dept":"B"})
> db.users.insert({"name":"GSa","age":22,"dept":"C"})
> db.users.insert({"name":"Rea","age":32,"dept":"C"})
> db.users.insert({"name":"Jeea","age":36,"dept":"C"})
> db.runCommand({"group":{"ns":"users","key":"dept","initial":{"age":0},"$reduce
":function(doc,prev){if(doc.age>prev.age){prev.age=doc.age,prev.name=doc.name}}}
})
{
        "retval" : [
                {
                        "age" : 51,
                        "name" : "Tesg"
                }
        ],
        "count" : 9,//时间文档总数
        "keys" : 1,//key有多少个不同的值,此处返回有误不知何原因?
        "ok" : 1
}
上面例子中ns指定了集合名称,key指定分组key值,initial指定初始化值,$reduce 函数会传递两个参数,当前文档和累加器文档(本组当前的结果)
还可以使用如下的方式
> db.users.group({"key":"dept",initial:{"age":0},"$reduce":function(doc,prev){if
(doc.age>prev.age){prev.age=doc.age,prev.name=doc.name}}});
[ { "age" : 51, "name" : "Tesg" } ]
为什么我两种方式下得到的结果都是错误的?
4.使用完成器
在group函数中指定“finalize”函数,在每组结果传递到客户端之前被调用。
5.将函数作为键使用
在分组函数中使用“$keyf”指定一个函数处理键值。
6.MapReduce
例子一:找出集合中所有的键
> map=function(){for(var key in this){emit(key,{count:1})}};
function () {
    for (var key in this) {
        emit(key, {count:1});
    }
}
> reduce=function(key,emits){var total=0;for(var i in emits){total+=emits[i].cou
nt;}return {"count":total};}
function (key, emits) {
    var total = 0;
    for (var i in emits) {
        total += emits[i].count;
    }
    return {count:total};
}
> r1=reduce("x",[{count:1,id:3}])
{ "count" : 1 }

> mr=db.runCommand({"mapreduce":"users","map":map,"reduce":reduce,"out":"result.
txt"})
{
        "result" : "result.txt", //结果对象
        "timeMillis" : 31,//话费的时间
        "counts" : {
                "input" : 10,//发送到map函数的文档数
                "emit" : 40,//函数emit调用的次数
                "output" : 5//结果集合中创建的文档数量
        },
        "ok" : 1
}
> db[mr.result].find()
{ "_id" : "_id", "value" : { "count" : 10 } }
{ "_id" : "age", "value" : { "count" : 10 } }
{ "_id" : "dept", "value" : { "count" : 9 } }
{ "_id" : "name", "value" : { "count" : 10 } }
{ "_id" : "sex", "value" : { "count" : 1 } }
分享到:
评论

相关推荐

    11、MongoDB聚合操作及索引使用详解-ev.rar

    11、MongoDB聚合操作及索引使用详解_ev.rar11、MongoDB聚合操作及索引使用详解_ev.rar11、MongoDB聚合操作及索引使用详解_ev.rar11、MongoDB聚合操作及索引使用详解_ev.rar11、MongoDB聚合操作及索引使用详解_ev.rar...

    MongoDB 聚合管道(Aggregation Pipeline)

    接下来,我们将详细地探讨MongoDB聚合管道的相关知识点。 首先,从概念上理解,MongoDB的聚合管道可以类比为一个数据处理的“流水线”,每个阶段(Stage)可以看作是流水线上的一个节点,文档会按顺序地通过这些...

    Mongodb聚合

    ### MongoDB 聚合框架详解 #### 概述 MongoDB 的聚合框架是数据库系统中一个强大而灵活的功能,用于处理复杂的数据分析需求。通过一系列的管道操作(pipeline stages),可以实现对数据集进行筛选、分组、计算等...

    MongoDB聚合实战:数据分析与财务应用轻松入门

    本书“MongoDB 聚合实战:数据分析与财务应用轻松入门”是为初学者和专业人士设计的一份指南,旨在帮助读者快速理解并应用 MongoDB 的聚合功能。 在第一部分,书中介绍了 MongoDB 的基础知识。从聚合的魅力开始,...

    MongoDB聚合操作详细步骤.pdf

    MongoDB中的聚合框架是一个强大且灵活的数据处理工具,它允许用户对存储在数据库中的数据执行各种操作,从简单的数据聚合到复杂的文本处理和数组操作等。 聚合框架的主要组成部分是管道(pipeline),它由多个处理...

    深入解析MongoDB聚合与索引:提升数据库效能的关键策略

    **一、MongoDB聚合** 聚合是MongoDB中处理数据的一种方式,允许用户对集合中的数据进行分析和计算,类似于SQL中的GROUP BY操作。聚合框架包括多个阶段,如`$match`(过滤数据)、`$group`(分组数据)、`$sort`...

    mongodb聚合学习使用文档.txt

    mongodb聚合学习使用文档

    JAVA mongodb 聚合几种查询方式详解

    JAVA mongodb 聚合查询方式详解 聚合查询是 MongoDB 中的一种强大查询方式,通过对数据进行分组、过滤、排序等操作,可以快速地获取所需的数据。在 JAVA 中使用 MongoDB 时,通常使用 Spring Data MongoDB 框架来...

    spring data mongodb 聚合 管道

    在Spring Data MongoDB中,聚合(Aggregation)是用于处理数据集合的一种强大工具,它允许开发者进行数据统计、分析和汇总。本篇文章将详细介绍如何利用Spring Data MongoDB API进行聚合查询,并提供一个具体的步骤...

    MongoDB聚合分组取第一条记录的案例与实现方法

    总结起来,MongoDB的聚合框架在处理复杂的数据分析任务时提供了强大功能,但在这个特定场景下,由于MongoDB聚合框架的限制,需要通过额外的处理步骤来实现目标。在实际应用中,应尽可能优化查询策略,减少数据处理的...

    meteor-aggregate, 对 Meteor的适当的MongoDB聚合支持.zip

    meteor-aggregate, 对 Meteor的适当的MongoDB聚合支持 meteorhacks:aggregate为 Meteor 添加适当聚合支持的简单软件包。 这个包在 Mongo.Collection 实例上公开了 .aggregate 方法。这只在服务器端工作,没有...

    MongoDB 聚合

    MongoDB聚合框架还支持多种聚合表达式,例如: - `$sum`:计算字段的总和,如计算所有文章的点赞总数。 - `$avg`:计算字段的平均值,用于求平均点赞数。 - `$min`:找出字段的最小值,可用于找到最不受欢迎的文章...

    MongoDB聚合框架:数据转换与分析的强大工具

    MongoDB是一个基于文档的NoSQL数据库,由C++语言编写,旨在为大量分布式数据提供高性能、高可用性和高灵活性的数据存储解决方案。...7. **灵活的聚合框架**:MongoDB的聚合框架允许用户执行复杂的数

    mongodb-query-exporter:Prometheus MongoDB聚合查询导出器

    Prometheus MongoDB查询导出器 用于MongoDB聚合查询导出器。特征支持量规指标推和推(仅MongoDB> = 3.6支持推) 支持多个MongoDB服务器Golang的公共API 公制缓存支持请注意,这并不是要替代来检测MongoDB内部。 此...

    js-pipes:JavaScript 中的 MongoDB 聚合管道实现

    JavaScript中的MongoDB聚合管道实现,即`js-pipes`,是一种用纯JavaScript代码模拟MongoDB数据库的聚合框架功能。在MongoDB中,聚合管道是一种强大的工具,用于处理和分析数据集合,提供了一种类似Unix管道的方式,...

    sparrowql:声明式MongoDB聚合

    声明式MongoDB聚合。 | | 包括什么? 仅在需要时自动进行$lookup 声明式管道生成 针对多集合查询进行了优化 使用SparrowQL的理由 创建SparrowQL的目的是使您对多集合查询的工作更加轻松和便捷。 SparrowQL是使...

    MongoDB的聚合框架Aggregation Framework入门学习教程

    本教程将详细介绍MongoDB聚合框架的基本概念和常用操作符,帮助你快速入门。 聚合框架的工作原理是通过创建一个“管道”(pipeline),这个管道由一系列处理阶段(stages)组成,每个阶段都会对输入文档进行操作并...

    loopback-mongo-aggregate-mixin:回送混入以查询MongoDB聚合管道并根据结果构建实例

    使模型能够查询本地MongoDB聚合并根据结果构建实例。 强调 接受回送过滤器的功能和管道阶段,它将合并在单个已解析的管道中以进行汇总。 接受根目录中的关系字段,它将作为$ lookup阶段进行处理。 从Loopback...

Global site tag (gtag.js) - Google Analytics