收藏
回答

云开发 查询 groupType以后如何计算数组中的值并将第一个值提到root

框架类型 问题类型 终端类型 AppID 环境ID 基础库版本
小程序 Bug 工具 wxbbfb0963f6a5f7c8 prod-7siri6 2.13.0

数据结构是:


这是利用 groupType值进行 group分组 以后的值

await db.collection('messagesUser').aggregate()
      .match({
        to: openId,
        status: _.neq(2)
      })
      .group({
        _id: '$groupType',
        list: $.push({
          _id: '$_id',
          from: '$from',
          to: '$to',
          noReadCount: '$noReadCount',
          groupType: '$groupType',
          type: '$type',
        })
      })
      .sort({
        status: 1,
        createTime: -1
      })
      .skip((page - 1) * limit)
      .limit(limit)
      .end()


对于这部分值我还希望做一下处理:

通过 groupType分组 以后 计算出 list中status== 0的数量,同时将list中的第一条数据提到root

最终得到的数据noReadCount 和 list[0] 在root层:

{ 
  messages: [
    {
      createTime,
      fromName:123123noReadCount: 5
    },
    {
      createTime,
      fromName:123123,
      noReadCount: 5
    },
  ]
}
//简化数据


而我现在的处理方式是:

await db.collection('messagesUser').aggregate()
      .match({
        to: openId,
        status: _.neq(2)
      })
      .group({
        _id: '$groupType',
        list: $.push({
          _id: '$_id',
          from: '$from',
          to: '$to',
          noReadCount: '$noReadCount',
          
        })
      //   // num: $.sum(1)
      })
      .addFields({
        noReadCount: $.size($.filter({
          input: '$list',
          as: 'list',
          cond: $.eq(['$$list.status', 0])
        })),
        info: $.slice(['$list', 1]),
        // message: '$$list.0'
      })
      .sort({
        status: 1,
        createTime: -1
      })
      .skip((page - 1) * limit)
      .limit(limit)
      .project({
        list: 0
      })

想请问下能怎么弄呢

回答关注问题邀请回答
收藏
登录 后发表内容
问题标签