MongoDB聚合运算符:$add

$add运算符将将数字相加或将数字和日期相加。如果参数之一是日期,则
$add会将其他参数视为毫秒,并添加到日期中。

语法

js 复制代码
{ $add: [ <expression1>, <expression2>, ... ] }

参数可以是任何有效的表达式,只要能否解析为数值或日期即可。

从 MongoDB 6.1 开始,可以优化$add操作,为提高性能,可在参数列表末尾分组引用。例如:

js 复制代码
$add: [ 1, 2, 3, '$a', '$b', '$c' ]

举例

示例使用sales集合:

json 复制代码
{ "_id" : 1, "item" : "abc", "price" : 10, "fee" : 2, date: ISODate("2014-03-01T08:00:00Z") }
{ "_id" : 2, "item" : "jkl", "price" : 20, "fee" : 1, date: ISODate("2014-03-01T09:00:00Z") }
{ "_id" : 3, "item" : "xyz", "price" : 5,  "fee" : 0, date: ISODate("2014-03-15T09:00:00Z") }

增加成员

下面的聚合使用$add表达式来计算总成本:

js 复制代码
db.sales.aggregate(
   [
     { $project: { item: 1, total: { $add: [ "$price", "$fee" ] } } }
   ]
)

在日期上执行加法

下面的聚合使用$add 表达式计算billing_date,方法是为date字段中添加 3*24*60*60000 毫秒(即3天):

js 复制代码
db.sales.aggregate(
   [
     { $project: { item: 1, billing_date: { $add: [ "$date", 3*24*60*60000 ] } } }
   ]
)

操作返回下面的结果:

json 复制代码
{ "_id" : 1, "item" : "abc", "billing_date" : ISODate("2014-03-04T08:00:00Z") }
{ "_id" : 2, "item" : "jkl", "billing_date" : ISODate("2014-03-04T09:00:00Z") }
{ "_id" : 3, "item" : "xyz", "billing_date" : ISODate("2014-03-18T09:00:00Z") }
相关推荐
努力努力再努力wz41 分钟前
【高性能网络库与HTTP Server系列】:基于主从 Reactor 模型实现高性能 C++ 网络库与 HTTP Server
开发语言·网络·数据结构·数据库·c++·网络协议·http
HackTwoHub1 小时前
某单位 CMS 完整渗透链、SQL 注入→后台拿权→绕过宝塔 Waf 上线 shell
数据库·人工智能·sql·安全·网络安全·系统安全·安全架构
Elastic 中国社区官方博客1 小时前
使用 Elasticsearch 作为 Grafana 的直接替代 Prometheus 后端
大数据·数据库·sql·elasticsearch·搜索引擎·grafana·prometheus
杨婷1231 小时前
2026 企业微信会话存档服务商选型指南:一维助手方案深度解析
大数据·数据库·企业微信
霸道流氓气质2 小时前
Kiro 配置 MySQL MCP Server 通用教程
数据库·mysql·adb·mcp·kiro
2601_963771372 小时前
Optimizing Logistics and Transportation Sites on WordPress
前端·数据库·windows·php
AC赳赳老秦2 小时前
采购专员自动化:OpenClaw 自动比价、生成询价单、跟踪供应商报价进度实战指南
开发语言·数据库·人工智能·python·自动化·github·openclaw
蚁库2 小时前
Oracle 11g RAC 多路径配置总搞不定?iSCSI + Multipath + ASM 磁盘组,14节视频带你完整通关
数据库·oracle
C++ 老炮儿的技术栈2 小时前
MFC 自定义纯色居中文字进度条控件
c语言·数据库·c++·windows·算法·c·visual studio
灯澜忆梦2 小时前
【MySQL1】| DDL 数据定义语言
数据库·sql·mysql