nodejs下mongo的键值转换

在Node.js环境中,使用think.mongoRecord对mongodb数据进行处理,包括筛选($match)、分组($group)、展开($unwind)、转换($project)、聚合($sum)等操作,实现日期格式化、数据汇总以及对象数组的键值转换,以获取并统计每日活跃用户数(active)和保留率(keep)。
摘要由CSDN通过智能技术生成
const activeResult = await think.mongoRecord('statics_daily').aggregate([
  {
    $match: chnWhere
  },
  {
    $group: {
      _id: { $dateToString: { format: '%Y/%m/%d', date: { '$subtract': ['$date', tz * 60 * 1000] } } },
      active: {$sum: '$active.today'},
      keep: {$push: '$active_retention'}
    }
  },
  { $unwind: '$keep' },
  {
    $project: {
      active: '$active',
      param: {
        $map: {
          input: {$objectToArray: '$keep'},
          as: 'parameter',
          in: {
            $cond: {
              if: { $ifNull: ['$$parameter.k', false] },
              then: {
                'ts': '$_id',
                'key': '$$parameter.k',
                'value': '$$parameter.v',
                'active': '$active'
              },
              else: false
            }
          }
        }
      }
    }
  },
  { $unwind: '$param' },
  {
    $group: {
      _id: { ts: '$param.ts', key: '$param.key', active: '$active' },
      value: {$sum: '$param.value'}
    }
  },
  {
    $group: {
      _id: '$_id.ts',
      active: { '$first': '$_id.active' },
      keep: {
        $mergeObjects: {
          $arrayToObject: [
            [{ k: '$_id.key', v: '$value' }]
          ]
        }
      }
    }
  },
  {
    $sort: {'_id': -1}
  }
]);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值