You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB技术问询:筛选下载上传总量超总流量80%的文档

解决MongoDB字段间运算的查询需求

嘿,我懂你要找的是那些下载量加上传量总和超过总配额80%的文档对吧?这个用MongoDB的$expr运算符就能轻松搞定,它允许我们在查询过滤阶段直接做字段之间的算术运算对比。

核心查询代码

直接用find方法配合$expr就能完成过滤,记得把yourCollectionName换成你实际的集合名称:

db.yourCollectionName.find({
  $expr: {
    $gt: [
      // 计算downloaded和uploaded的总和
      { $add: ["$daily_log.downloaded", "$daily_log.uploaded"] },
      // 计算total的80%阈值
      { $multiply: ["$daily_log.total", 0.8] }
    ]
  }
})

代码细节解释

  • $add:聚合表达式,用来把daily_log.downloaded和daily_log.uploaded两个字段的值相加
  • $multiply:聚合表达式,将daily_log.total乘以0.8得到总配额的80%阈值
  • $gt:比较运算符,判断左边的总和是否大于右边的阈值
  • $expr:关键特性,让我们能在普通find查询里使用聚合管道的表达式,实现字段间的运算对比(这个功能从MongoDB 3.6版本开始支持)

进阶:同时查看使用百分比

如果想在结果里直接看到已使用的百分比,可以用聚合管道,在过滤后加上$project生成计算字段:

db.yourCollectionName.aggregate([
  // 第一步:过滤符合条件的文档
  {
    $match: {
      $expr: {
        $gt: [
          { $add: ["$daily_log.downloaded", "$daily_log.uploaded"] },
          { $multiply: ["$daily_log.total", 0.8] }
        ]
      }
    }
  },
  // 第二步:投影字段并计算使用百分比
  {
    $project: {
      id: 1,
      daily_log: 1,
      usedPercentage: {
        $multiply: [
          { $divide: [
            { $add: ["$daily_log.downloaded", "$daily_log.uploaded"] },
            "$daily_log.total"
          ]},
          100
        ]
      }
    }
  }
])

这样返回的文档会多一个usedPercentage字段,直接显示已使用的百分比(比如85就代表用了85%)。

内容的提问来源于stack exchange,提问作者şafak çağırağ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:19:39