表名:parkUserCost

id:

patkId:

userId:

phone:

costVal:

适合特定条件下,对某些字段进行去重筛选。(比如限定抢购)

第一种,使用\(first操作符。\)first 会把数组的第一个元素取出,作为一个对象。

// 第一种(可转java版本)
db.getCollection('parkUserCost').aggregate([
{"$match" : {
"$and" : [
// {"name" : "1640"} // 筛选条件
]
}
},
{"$group" : {
"_id" : "$phone",
"val" : {"$first" : "$costVal" },
}},
{"$group" : {
"_id" : {},
"totalVal" :{"$sum" : "$val"}
}}
])

第二种,使用$slice操作符。从数组的第几个开始,截取几个,保存到数组

// 第二种
db.getCollection('parkUserCost').aggregate([
{"$match" : {
"$and" : [
// {"name" : "1640"} // 筛选条件
]
}
},
{"$group" : {
"_id" : "$phone",
"val" : {"$push" : "$costVal" },
}},
{"$project" : {
"val" :{"$sum" :{"$slice" : ["$val", 0, 1 ] }}
}},
{"$group" : {
"_id" : {},
"totalVal" :{"$sum" : "$val"}
}}
])

第三种,使用$arrayElemAt,返回数组的第几个元素。序号的循环的,最后一个使用-1

// 第三种
db.getCollection('parkUserCost').aggregate([
{"$match" : {
"$and" : [
// {"name" : "1640"} // 筛选条件
]
}
},
{"$group" : {
"_id" : "$phone",
"val" : {"$push" : "$costVal" },
}},
{"$project" : {
"val" : { "$arrayElemAt" :[ "$val" , 0] }
}},
{"$group" : {
"_id" : {},
"totalVal" :{"$sum" : "$val"}
}}
])

若要表中的全部字段,可使用$$ROOT获取

db.getCollection('parkUserCost').aggregate([
{"$match" : {
"$and" : [
// {"name" : "1640"} // 筛选条件
]
}
},
{"$group" : {
"_id" : "$phone",
"item": {"$first": "$$ROOT"},
"val" : {"$first" : "$costVal" },
}},
])

http://www.runoob.com/mongodb/mongodb-tutorial.html

mongo去重统计的更多相关文章

  1. thinkphp去重统计数据sql

    DISTINCT 方法用于返回唯一不同的值 官方文档给出的示例: $Model->distinct(true)->field('userName')->select(); 解析的SQ ...

  2. Linux命令去重统计排序

    利用Linux命令进行文本按行去重并按重复次数排序   linux命令行提供了非常强大的文本处理功能,组合利用linux命令能实现好多强大的功能.本文这里举例说明如何利用Linux命令行进行文本按行去 ...

  3. Linux sort 排序 去重 统计

    先写一个命令: cut -d' ' -f1 ~/.bash_history|sort -d | uniq -c|sort -nr|head 这个命令可以统计你历史上输入的命令的次数的前十条 整个命令基 ...

  4. Flink去重统计-基于自定义布隆过滤器

    一.背景说明 在Flink中对流数据进行去重计算是常有操作,如流量域对独立访客之类的统计,去重思路一般有三个: 基于Hashset来实现去重 数据存在内存,容量小,服务重启会丢失. 使用状态编程Val ...

  5. TinkPHP去重统计查询

    当统计一个有重复的字段可以用这个方法 $count = $model->where($map)->count('distinct(id)'); 转自 http://www.thinkphp ...

  6. 网站每日UV数据指标去重统计

    package com.iexecloud.cloud.casemanager;import redis.clients.jedis.Jedis;import java.text.SimpleDate ...

  7. 统计Mongo数组中相同对象的属性之和

    统计Mongo数组中相同对象的属性之和 需求 需要统计app端用户的行为,按天分表,存入mongo.每次用户进行操作的时候,将数据存入app本地,下次用户启动的时候,提交存入mongo,删除app本地 ...

  8. 常用的数据统计Sql 总结

    最近刚在搞一个BI的项目,里面需要大量的sql 数据统计相关运用,加深了我又对SQL的理解与使用. 所以,分享几个数据统计时常用的sql 语句总结: 1. 统计各个条件下的数据 select Batc ...

  9. 常用的数据统计Sql 总结(转)

    转:http://www.cnblogs.com/zhangweizhong/p/5577842.html 最近刚在搞一个BI的项目,里面需要大量的sql 数据统计相关运用,加深了我又对SQL的理解与 ...

随机推荐

  1. LINE_NO in format of XXXX example -> Line 10 is 0010

    select case when length(line_no) = 1 then to_char(line_no) when length(line_no) = 2 then '00' || lin ...

  2. IIS 设置文件可下载

    IIS遇到了文件不能下载的问题.为了让IIS能下载扩展名是INI的文件,我们需要如此操作:(括号内的是英文版本的名字) 打开“IIS管理器(InternetInformationServices(II ...

  3. 在Visual Studio2015中使用单元测试

    所谓的单元测试(Unit Test),就是对软件的一些模块进行测试以检查其正确性和可靠性,这些模块可以是一个类或者是一个方法等.在Visual studio中,这十分容易实现. 打开Visual st ...

  4. MSYS2开发环境搭建(无幻的博客,编译OpenSSL,可使用pacman升级)

    MSYS2开发环境搭建 软件安装 下载msys2-x86_64软件包,双击安装到某根目录下,比如D:\msys64. pacman是MSYS2自带的软件管理工具: 可通过修改msys64\etc\pa ...

  5. .NET Core RC2在Linux下部署

    前言 目前ASP.NET Core RC2已经正式发布了,可以参考如下链接: https://blogs.msdn.microsoft.com/dotnet/2016/05/06/net-core-r ...

  6. VIM技巧, .vimrc文件

    将 .vimrc文件上传到用户家目录下 文件内容如下: autocmd BufNewFile *.py,*.cc,*.sh,*.java exec ":call SetTitle()&quo ...

  7. 前端Web浏览器基于Flash如何实时播放监控视频画面(前言)之流程介绍

    [关键字:前端浏览器如何播放RTSP流画面.前端浏览器如何播放RTMP流画面] 本片文章只是起到抛砖引玉的作用,能从头到尾走通就行,并不做深入研究.为了让文章通俗易懂,尽量使用白话描述. 考虑到视频延 ...

  8. Codeforces 781A:Andryusha and Colored Balloons(DFS染色)

    http://codeforces.com/contest/782/problem/C 题意:给一棵树染最少的颜色,使得相邻距离为2的点都是不同的颜色,问最少是多少种颜色并输出每个点的颜色. 思路:比 ...

  9. Ural 2062:Ambitious Experiment(树状数组 || 分块)

    http://acm.timus.ru/problem.aspx?space=1&num=2062 题意:有n个数,有一个值,q个询问,有单点询问操作,也有对于区间[l,r]的每个数i,使得n ...

  10. BZOJ 3295:[Cqoi2011]动态逆序对(三维偏序 CDQ分治+树状数组)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3295 题意:简单明了. 思路:终于好像有点明白CDQ分治处理三维偏序了.把删除操作看作是插入操作,那 ...