数据结构是:
这是利用 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:123123,
noReadCount: 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
})
想请问下能怎么弄呢