云开发 - 筛选数组中的某时间段的数据

数据格式模拟:

[{
    _id:xxxxx,
    name:xxx,
    age:18,
    health_records:[ky_start_at:开始时间,ky_end_at:'结束时间',....]
},
{
    _id:xxxxx,
    name:xxx,
    age:20,
    health_records:[ky_start_at:开始时间,ky_end_at:'结束时间',....]
}]

方法:

  • 使用filter过滤符合范围的时间段
  • 筛选:

$.and([$.gte(['$min', 30]), $.lte(['$max', 80])])

代码:

  const db = cloud.database()
  const _ = db.command
  const $ = _.aggregate
  let pageSize = 10
  let stat_time = new Date('2021-12-1')
  let end_time = new Date('2022-1-1')
  let condition = _.or([{
      phone: event.phone
    },
    {
      name: event.phone
    },
    {
      employee_id: event.phone
    }
  ])
  if (!event.phone) {
    condition = {
      _id: _.neq('') 
    }
  }
  // 默认时间是大于12月19日, 加以条件是大于选定的两个时间
  return await cloud.database().collection('ky_records')
    .aggregate() //可进行联表查询,返回联表查询对象
    .project({
      health_records: $.filter({
        input: '$health_records',
        as: 'item',
        // cond: $.gte(['$$item.ky_start_at', stat_time])
        cond: $.and([$.gte(['$$item.ky_start_at', stat_time]), $.lte(['$$item.ky_end_at', end_time])]) 
      })
    })
    .match(condition)
    .sort({
      'create_at': -1
    }) // 不排序没办法分页   
    .skip(event.page * pageSize)
    .limit(pageSize)
    .end()

 结果:

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值