微信小程序:云函数关于嵌套数组分页查询的实现

背景:

  1. 数据库有一个merchant 集合,集合中保存的是商户信息,每个商户一条记录
  2. 每个商户会有很多会员,会员记录存储在商户记录的 member 数组属性中
  3. 每个会员会有很多消费记录,消费记录存储在会员记录的 consumption 数组字段中

merchant 集合中保存的数据如下面所示:

{...},
{...},
{
  merchant_id: xxxxxx,
  member: [
    {...},
    {..},
    {
      member_id: xxxxxx,
      consumption: [
        {...},
        {...},
        {
          consumption_id: xxxxxx,
          amount: xx,
          timestamp: xx,
        }
      ]
    }
  ]
}

需求:
作为商户,我需要通过一次查询获取:分页获取我的会员记录,包括会员的消费记录。
该查询包括两次分页查询,例如:查询出前20条会员记录,每个会员包括前20条消费记录。

遇到的问题:
查询出前20条会员记录容易,使用 $.slice() 即可,问题出在无法同时得到每个会员的前20条消费记录。
整了许久也没有搞定。

变通的处理方法
分两步走:
第一步:只分页查询出前20条会员记录,不包含其下的消费记录。
第二步:当用户需要查看某个会员的消费记录时,再分页查询出该会员的前20条消费记录。

第二步中有个处理关键点:通过 $.arrayElemAt(['$member', 0])将会员记录从 member 数组中提取出来。因为只查询某一个会员的消费记录,所以可以提取出这一个会员信息,将其从 list[0] 数组状态变为 json 对象状态,这样就可以接着通过 $.slice() 分页取出该会员的前20条消费记录。期间会多次用到 Aggregate.project()

核心代码如下:

      .project({ 
        member0: $.arrayElemAt(['$member', 0]),
      })
      .project({
        member0: {
          consumption: $.slice(['$member0.consumption', 0, 20])
        }
      })
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容