我先贴下当前的进度
const shareList = (await db.collection('share_history').aggregate().match({
photoCaseId
}).group({
_id: '$_openid'
}).end())
这是打印shareList的结果,我有一个表,单独用来记录分享行为,但一个人可以产生多条分享行为,我在部分场景下,需要知道有多少个人分享了,以及这些人是谁(明细数据)
打个比方,共有32条分享记录,但是是只有3个人在分享,目前通过上述代码做了分组,可以查询出来是哪几个人分享了,但是我希望一步到位,把其他的信息也展示出来,而不是拿到id再查一次。
group这个方法,除了id,好像只能加统计信息,不能加其他属性
暂时是这样处理的,以后有更好的方案,再优化。
1、先group,获得openid
2、for循环,通过openid查询到数据集,取第一条。
3、将取到的数据重新组装成一个list
4、end
end()前lookup一下: lookup({ from: <要连接的集合名>, localField: <输入记录的要进行相等匹配的字段>, foreignField: <被连接集合的要进行相等匹配的字段>, as: <输出的数组字段名> })
参考文档:Aggregate]((Aggregate)).lookup(object: Object): [Aggregate | 微信开放文档
https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/database/aggregate/Aggregate.lookup.html
[
{
a:1,
b:1
},
{
a:1,
b:2
},
{
a:1,
b:2
},
{
a:2,
b:2
}
]
//假如上面是原数据,那我的需求是通过处理后,得到以下数据。
[
{
a:1,
b:1
},
a:1,
{
a:2,
b:2
}
]
可以用那个聚合啊lookup函数链表查询