收藏
回答

点赞的数据库聚合阶段查询的问题?

数据库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好像匹配了之后就只能保存匹配成功的数据,如果没匹配上的数据就被丢掉了,而且也无法添加新字段是吧?


回答关注问题邀请回答
收藏

1 个回答

  • 孟昊迪
    孟昊迪
    2021-04-05
    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
              },
            ],
            defaultfalse
          }),
          marshallingSequence:1,
          recommendItem:1,
          recommendType:1,
          thumUpNum:1
        })
        .end()
        .then(res => console.log(res))
        .catch(err => console.error(err))
    j解决了
    
    2021-04-05
    有用 1
    回复
登录 后发表内容
问题标签