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

如何使用MongoDB聚合管道合并URL短链文档中重复日期的点击记录并求和日点击量

没问题,我来帮你搞定这个短链点击统计的合并需求。你需要用MongoDB的聚合管道来实现,核心思路是先展开数组、按日期分组求和,再重新组装成你要的结构。下面是完整的实现方案:

MongoDB聚合管道解决方案

完整聚合查询代码

db.yourCollectionName.aggregate([
  // 1. 展开dayWiseClicks数组,让每个数组元素成为独立文档条目
  { $unwind: "$dayWiseClicks" },
  // 2. 按文档ID+日期分组,求和点击量并保留所有其他字段
  {
    $group: {
      _id: {
        docId: "$_id",
        date: "$dayWiseClicks.date"
      },
      // 保留第一个点击条目的_id(和你示例结构一致)
      clickEntryId: { $first: "$dayWiseClicks._id" },
      // 对当日点击量求和
      totalDailyClicks: { $sum: "$dayWiseClicks.dailyClicks" },
      // 保留文档其他所有字段(用$first取同文档内的唯一值)
      merchant_name: { $first: "$merchant_name" },
      store_id: { $first: "$store_id" },
      original_url: { $first: "$original_url" },
      url_hash: { $first: "$url_hash" },
      subdomain: { $first: "$subdomain" },
      totalClicks: { $first: "$totalClicks" },
      igClicks: { $first: "$igClicks" },
      fbClicks: { $first: "$fbClicks" },
      directClicks: { $first: "$directClicks" },
      desktopClicks: { $first: "$desktopClicks" },
      mobileClicks: { $first: "$mobileClicks" },
      createdAt: { $first: "$createdAt" },
      updatedAt: { $first: "$updatedAt" },
      __v: { $first: "$__v" }
    }
  },
  // 3. 重新构造dayWiseClicks数组并恢复原始文档ID
  {
    $addFields: {
      dayWiseClicks: [{
        date: "$_id.date",
        dailyClicks: "$totalDailyClicks",
        _id: "$clickEntryId"
      }],
      _id: "$_id.docId"
    }
  },
  // 4. 清理临时字段
  {
    $project: {
      clickEntryId: 0,
      totalDailyClicks: 0
    }
  }
])

步骤详解

  1. $unwind阶段:把dayWiseClicks数组拆分成独立文档,比如原来3条同日期的条目会变成3个单独的文档,方便后续分组处理。
  2. $group阶段:
    • 用「原始文档ID+日期」作为分组键,确保同一个短链下的同日期点击被合并。
    • $sum计算当日总点击量,$first保留其他字段的唯一值(因为同个原始文档的这些字段都是相同的),同时保留第一个点击条目的_id匹配你的示例结构。
  3. $addFields阶段:重新组装dayWiseClicks数组,把分组后的日期、总点击量和保留的条目ID放进去,同时恢复原始文档的_id。
  4. $project阶段:删掉分组过程中产生的临时字段,让最终文档结构更简洁。

自定义提示

  • 记得把yourCollectionName替换成你实际的集合名称。
  • 如果只需要处理特定短链,在最前面加一个$match阶段过滤:
    { $match: { _id: ObjectId("61f6322cd3e3484d97a25e7c") } }
    
  • 如果你的Schema后续新增字段,要在$group阶段用$first把新字段也加进去,保证文档完整性。

内容的提问来源于stack exchange,提问作者Shahriar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 11:19:07