表名: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. ORA-02085: database link string connect to string

    ORA-02085: database link string connects to string Cause: a database link connected to a database wi ...

  2. 求 1-2+3-4+5-6+7-8....M 的结果算法

    static void Main(string[] args) { /** * 算法题: * 求 1-2+3-4+5-6+7-8....M 的结果. * */ //存储运算结果. ; //记号. ; ...

  3. 制作Qt应用程序的插件(使用QtPlugin),对比DLL它是全平台通用的

    在Qt下,插件有两种形式,一种是用于QtCreator下,扩展IDE功能.另一种是用于扩展开发者的应用.本文要讲的是后者. 定义一个纯虚类作为插件接口 #include <QtPlugin> ...

  4. javascript 实现ajax

    AJAX 英文名称 Asynchronous JavaScript and XML即异步的 JavaScript 和 XML AJAX 是与服务器交换数据并更新部分网页一门无刷新技术构建自己的ajax ...

  5. Paragon NTFS for Mac 15.5.53 中文破解版(激活码)下载

    Paragon NTFS for Mac中文破解版是一款超级受欢迎的简单.高效.安全的格式读写软件,提供给大家,再也不用到处找Paragon NTFS序列号和Paragon NTFS激活码啦,帮您轻松 ...

  6. 浅谈ASP.NET Core中IOC与DI的理解和使用

    说起IOC和DI,使用过ASP.NET Core的人对这两个概念一定不陌生,早前,自己也有尝试过去了解这两个东西,但是一直觉得有点很难去理解,总觉得对其还是模糊不清,所以,趁着今天有空,就去把两个概念 ...

  7. 球体的双目视觉定位(matlab,附代码)

    球体的双目视觉定位(matlab,附代码) 标签(空格分隔): 机器视觉 引言 双目视觉定位是我们的一个课程设计,最近刚做完,拿出来与大家分享一下,实验的目的是在拍摄的照片中识别球体,并求出该球体到相 ...

  8. Flume 简介及基本使用

    一.Flume简介 Apache Flume是一个分布式,高可用的数据收集系统.它可以从不同的数据源收集数据,经过聚合后发送到存储系统中,通常用于日志数据的收集.Flume 分为 NG 和 OG (1 ...

  9. 开源joda-time使用demo

    开源joda-time 1.maven中引入 <dependency> <groupId>joda-time</groupId> <artifactId> ...

  10. Python向FTP服务器上传文件

    上传 代码示例: #!/usr/bin/python # -*- coding:utf-8 -*- from ftplib import FTP ftp = FTP() # 打开调试级别2, 显示详细 ...