数据库A保存文章
[{
_id:1,
time:'2021-4-5'
},{
_id:2,
time:'2021-4-5'
},{
_id:3,
time:'2021-4-6'
}
]
数据库B保存点赞数据
[{
_id:0,
_openid:a,
thumbUpID:2
ifThumbUp:true,
}]
数据库中有一个点赞了id为2的文章的数据
我如何通过聚合查询查找数据库A中所有time为'2021-4-5'的数据,同时联表查询数据库B中的点赞数据,如果在数据库A中的文章被某用户点赞,就把输出的数据中在加上ifThumbUp:true的字段,否则ifThumbUp:false。
使用lookUp好像匹配了之后就只能保存匹配成功的数据,如果没匹配上的数据就被丢掉了,而且也无法添加新字段是吧?
db.collection('recommend').aggregate() .match({ showTime: _.in(['2020-4-3']), recommendType: 0 }).lookup({ from: 'thumbUp', let: { recommendId: '$_id', }, pipeline: $.pipeline().match(_.expr($.and([ $.eq(['$_openid', wxContext.OPENID]), $.eq(['$recommendId', '$$recommendId']), ]))) .project({ ifThumbUp: $.eq(['$ifThumbUp', true]), _id: 0 }) .done(), as: 'ifThumbUpArray', }).project({ ifThumbUp: $.switch({ branches: [{ case: $.eq([$.arrayElemAt(['$ifThumbUpArray', 0]), {ifThumbUp:true}]), then: true }, ], default: false }), marshallingSequence:1, recommendItem:1, recommendType:1, thumUpNum:1 }) .end() .then(res => console.log(res)) .catch(err => console.error(err)) j解决了