表名: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. cairo 图形库

    简介 提到cairo,估计很少知道这还是一个图形库的名字(http://cairographics.org),Linux的两大流行桌面环境KDE和Gnome,其对应的基础组件是QT和GTK+,相对于框 ...

  2. qt截获html请求(继承QNetworkAccessManager和QNetworkReply)

    QtWebkit加载html页面,html中会有很多的请求,比如<img id="testImg" src="http://*.jpg" width=&q ...

  3. OpenGL与Directx的区别

    OpenGL 只是图形函数库. DirectX 包含图形, 声音, 输入, 网络等模块. 单就图形而论, DirectX 的图形库性能不如 OpenGL OpenGL稳定,可跨平台使用.但 OpenG ...

  4. ssh超时时间设置(设置ClientAliveInterval),附SSH超详细参数

    作者: daodaoliang 版本: V 0.0.1 日期: 2016年12月29日 0x00 OpenSSH 简介 OpenSSH是采用SSH协议实现的重要的远程连接工具,它对所有的数据进行加密以 ...

  5. 学习Java,值得你留意的问题(1)更名为《学习Java,容易被你忽略的小细节(1)》

    记得大二快要结束的时候,有个女孩子突然问我“你会Java吗,帮我做大作业好吗?” 实话说,那个女孩真的很漂亮,我当时也非常想帮她.但是我从来没有接触过Java,让我在短短的几天内完成Java程序设计课 ...

  6. SYN2102型 NTP网络时间服务器

    SYN2102型  NTP网络时间服务器   ntp主时钟服务器ntp时钟服务器厂商使用说明视频链接: http://www.syn029.com/h-pd-57-0_310_1_-1.html 请将 ...

  7. 浅谈Java中的命名规范

    现代软件架构的复杂性需要协同开发完成,如何高效地协同呢? 答案是:制定一整套统一的规范. 无规矩不成方圆,无规范难以协同,比如,制订交通法规表面上是要限制行车权,实际上是保障公众的人身安全,试想如果没 ...

  8. IOS关于数据加密(主要为登录加密)想总结的

    首先上来就来说一下,IOS常见的几种加密算法  *哈希(散列)函数 : MD5.SHA  *对称加密算法:DES.3DES.AES  *非对称加密算法:RSA 一.哈希(散列)函数  1.MD5 MD ...

  9. 【转】如何在Ubuntu 14.04 LTS上设置Nginx虚拟主机

    介绍 转自http://www.pandacademy.com/%E5%A6%82%E4%BD%95%E5%9C%A8ubuntu-14-04-lts%E4%B8%8A%E8%AE%BE%E7%BD% ...

  10. vue结合Ant Design实现后台系统的权限分配(支持无限子级嵌套)

    最近公司的业务需要,要做一个后台管理系统的管理系统类似于这样子 功能需求如下: 左边是权限菜单,右边对应的是具体权限. 1.父级权限菜单选中,父级权限菜单的权限包括其中所有子级权限菜单的权限也要选中, ...