- 云函数,请问如何给获取到集合结果后给数组字段排序?
假设通过 db.collection('xxx').doc(1).get() 得到以下数据: { _id: 1, title1: 'tt', title2: 'tt', list: [{ id: 1, date: '2020-06-18' },{ id: 2, date: '2020-06-28' }] } 然后我想在得到这个数据之后在原数据的基础上将list按date倒序排序得到以下结果 { _id: 1, title1: 'tt', title2: 'tt', list: [{ id: 2, date: '2020-06-28' },{ id: 1, date: '2020-06-18' }] } 我尝试将查询语句改成这样: db.collection('xxx').aggregate() .match({ _id: 1 }) .unwind('$list') .sort({ 'list.date': -1 }) .group({ _id: '$_id', title1: $.first('$title1'), title2: $.first('$title2'), list: $.push('$list') }) .end() 这样查之后,确实可以得到我想要的结果,但是有个问题是, 我的list字段是动态的,会有为空数组的情况,按照上面的写法,如果list为空数组, 那么最后连_id、title1、title2这三个字段都没了,请问下这个查询语句该怎么改才能达到想要的效果?
2020-06-18 - 云函数中聚合数组字段,结果的顺序变了?
微信小程序云开发中,在云函数里需要取关联表的内容,使用了聚合技术,云函数中代码如下: await db.collection('groupon').aggregate().match({ course: courseId }) .lookup({ from: 'user', localField: 'member', foreignField: '_id', as: 'memberList', }).end() .then(res => { console.log(res); cg.course = res.data; }) .catch(err => console.error(err)) 其中groupon表有个member字段是个数组,里面装了user表的主键。现在使用聚合技术得到结果如下:[图片] 可以看到效果基本出来了,member是原始数据是user表得主键构成得数组,然后memberList是根据member聚合后得到对象数组,但是有个大问题,就是顺序居然发生了变化。 怎么破?
2021-05-09