mongo去重统计

简介: 表名:parkUserCostid:patkId:userId:phone:costVal:适合特定条件下,对某些字段进行去重筛选。(比如限定抢购)第一种,使用\(first操作符。

表名: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

遗失的拂晓
目录
相关文章
|
NoSQL MongoDB
11 MongoDB - 数据查询(统计个数)
11 MongoDB - 数据查询(统计个数)
935 0
|
SQL NoSQL 关系型数据库
MongoDB复杂分组聚合查询1
MongoDB复杂分组聚合查询1
541 0
使用mongo聚合分组查询获取每一组的时间最大的一条数据
使用mongo聚合分组查询获取每一组的时间最大的一条数据
1143 0
|
存储 NoSQL 索引
MongoDB聚合—计数count
MongoDB聚合—计数count
8218 0
|
NoSQL Java 数据库
MongoDB 分组统计
   MongoDB 作为 NoSql 文档型数据库,在全球范围得到广泛的支持与应用。在比较常用的数据库功能中,相对于普通的增删改查,使用 group 聚合分组统计有些复杂,而 MongoDB 也给予了支持。
3533 0
|
NoSQL MongoDB
mongodb 分组查询、指定时间段查询
mongodb 分组查询、指定时间段查询
|
NoSQL Cloud Native MongoDB
mongo 聚合操作
mongo 聚合操作
|
SQL NoSQL 关系型数据库
MongoDB复杂分组聚合查询2
MongoDB复杂分组聚合查询2
127 0
|
分布式计算 JavaScript 前端开发
MongoDB复杂分组聚合查询3
MongoDB复杂分组聚合查询3
144 0
|
编解码 NoSQL 数据可视化
MongoDB——聚合数组大小做统计
前段时间做统计,我们的平台数据库用的mongodb,其中有一个统计需求如下:需要查询每个用户的转码个数(对应的素材,每个素材可能有多个转码)