博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mongo去重统计
阅读量:6952 次
发布时间:2019-06-27

本文共 1698 字,大约阅读时间需要 5 分钟。

表名: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://jvjil.baihongyu.com/

你可能感兴趣的文章
VMware下的Linux中调整屏幕大小,分辨率问题,终于解决啦
查看>>
cxgrid打印
查看>>
必 备 习 题 集 ( 三 )
查看>>
citrix桌面发布方式
查看>>
HTTP协议详解(真的很经典)
查看>>
EMC销售部全球CTO Patricia Florissi:大数据不是炒作
查看>>
判断字符串是否是合法的ipv4地址
查看>>
Linux系统手动安装rzsz 软件包
查看>>
Hyper-V安装笔记
查看>>
Golang面试题解析(二)
查看>>
Juniper SRX与思科跑IPSEC ×××+OSPF
查看>>
passwd修改用户密码
查看>>
Windows Phone(三)WP7版 " 记账本" 开发(使用SQLite数据库)
查看>>
CSS 几款比较常用的翻转特效(转载)
查看>>
IO多路复用, 基于IO多路复用+socket实现并发请求(一个线程100个请求), 协程
查看>>
大白话Vue源码系列(03):生成AST
查看>>
Android 微信第三方登录
查看>>
Java中保留小数点后几位
查看>>
利用 Python_tkinter 完成 2048 游戏
查看>>
洛谷P2756 飞行员配对方案问题
查看>>