zoukankan      html  css  js  c++  java
  • mongo去重统计

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

  • 相关阅读:
    rsyslog日志服务器搭建
    使用原生js实现对table中的某个单元格进行编辑并提交后台修改数据
    使用vuex管理的状态数据在刷新页面后数据丢失的问题
    brew install mongodb
    brew安装与启动redis
    zsh设置代理
    DNS Rebinding漏洞原理
    防数据泄露_MySQL库和数据安全
    PHP代码审计_用==与===的区别
    MySQL提权 通过UDF
  • 原文地址:https://www.cnblogs.com/lossingdawn/p/7813422.html
Copyright © 2011-2022 走看看