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

遗失的拂晓
目录
相关文章
|
虚拟化
vmware克隆虚拟机后没有ip地址的问题
解决vmware克隆虚拟机后没有内网ip的问题
|
网络安全
如何在 Debian 系统上配置 NTP,来确保计算机时间的准确同步
如何在 Debian 系统上配置 NTP,来确保计算机时间的准确同步
4557 0
如何在 Debian 系统上配置 NTP,来确保计算机时间的准确同步
|
NoSQL MongoDB 索引
Mongo优化——explain函数的基本使用
当数据量不大时,查询语句随便写,只要实现逻辑功能即可;但当数据量大到一定程度时,可能以前的方法就不可行了,因为一是查询数度变慢,更有甚者可能因数据量大而导致查询失败。解决这种问题最简单的方法是添加索引并利用好这些索引。可以通过explain函数来分析:1、在建索引前数据请求情况2、创建索引后数据请求是否有变好。现在就来看看explain相关知识。
4604 0
|
7月前
|
存储 安全 Java
c++--继承
c++作为面向对象的语言三大特点其中之一就是继承,那么继承到底有何奥妙呢?继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用,继承就是类方法的复用。
163 0
|
4月前
|
人工智能 运维 Java
Flink Agents:基于Apache Flink的事件驱动AI智能体框架
本文基于Apache Flink PMC成员宋辛童在Community Over Code Asia 2025的演讲,深入解析Flink Agents项目的技术背景、架构设计与应用场景。该项目聚焦事件驱动型AI智能体,结合Flink的实时处理能力,推动AI在工业场景中的工程化落地,涵盖智能运维、直播分析等典型应用,展现其在AI发展第四层次——智能体AI中的重要意义。
1493 27
Flink Agents:基于Apache Flink的事件驱动AI智能体框架
|
存储 SQL 监控
【Clickhouse 探秘】你真正知道 Clickhouse 吗?
ClickHouse 是一个开源的列式数据库管理系统,专为在线分析处理(OLAP)设计。它由 Yandex 开发并于 2016 年开源。ClickHouse 以其高性能、实时数据处理能力和易用性著称,广泛应用于大数据分析、日志处理和用户行为分析等领域。其主要特点包括列式存储、向量化执行、分布式架构、丰富的数据类型和 SQL 支持。
1415 4
|
Linux Go 网络安全
goland 远程调试 remote debug
goland 远程调试 remote debug
649 0
|
人工智能 IDE 测试技术
人工智能 | 结对编程助手GithubCopilot
GitHub Copilot 是一款人工智能编码助手,能够加速您的编程流程。它根据上下文即时提供建议,无论是单行代码还是完整函数。Copilot 由 GitHub、OpenAI 和 Microsoft 联合开发,可在多种 IDE(如 Visual Studio Code、JetBrains IDEs)中使用。只需在 IDE 中安装扩展并激活服务,即可享受智能代码补全功能。虽然 Copilot 有助于提升开发效率,但也需用户审慎检查其提供的建议以确保准确性。试用结束后,记得管理订阅以免产生不必要的费用。
人工智能 | 结对编程助手GithubCopilot
|
人工智能 Rust 安全
WebAssembly运行时库(WASM runtime:wasmer 或 wasmtime)\将rust官方demo猜数字编译为WASI目标并使用Wasmer运行
WebAssembly运行时库(WASM runtime:wasmer 或 wasmtime)\将rust官方demo猜数字编译为WASI目标并使用Wasmer运行
367 2
|
监控 Linux Shell
Linux命令setsid深度解析
`setsid`是Linux命令,用于创建新会话并运行命令,使其独立于终端,不受用户注销影响。它创建新会话和进程组,进程成为领头进程。常用在后台任务,如数据处理和守护进程。示例:`setsid ping baidu.com`。注意需手动重定向I/O,结合`nohup`使用更佳。适用于长时间运行的服务和脚本管理。

热门文章

最新文章