假设通过 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这三个字段都没了,请问下这个查询语句该怎么改才能达到想要的效果?
unwind({ path: '$list', preserveNullAndEmptyArrays: true })
若认为该回答有用,给回答者点个[ 有用 ],让答案帮助更多的人
let result = await db.collection('xxx').doc(id).get()
result.data.list.sort((a, b) => {
return a.date < b.date ? 1 : -1
})
我用这种办法实现了
let result = await db.collection('xxx').doc(id).get() result.data.list.sort((a, b) => { return a.date < b.date ? 1 : -1 })