收藏
回答

如何联表查询用户指定的信息?

① user 表

{
    _id: user_1,
    openId: 123,
    nickName: 爱去宁国,
    avatarUrl: http://mp.weixin.com/123.jpg,
    points: 100
}


② info 表

{
    _id: info_1,
    _openid: 123,
    createTime: 2020-08-29
}


③ 我想根据 info 表的 _openid 联表查询用户信息,预期返回结果如下:

{
    _id: info_1,
    _openid: 123,
    createTime: 2020-08-29,
    creator: {
        userId: user_1
        nickName: 爱去宁国,
        creatorAvatarUrl: http://mp.weixin.com/123.jpg
    }
}


哪位老哥指点下,感谢

最后一次编辑于  2020-09-12
回答关注问题邀请回答
收藏

2 个回答

  • 27
    27
    2020-09-12
    db.collection('info')
      .aggregate()
      .lookup({
                from: 'user',
                pipeline: $.pipeline()
                    .match({
                        openId: 123, // user 中的 openId
                    })
                    .project({
                        creator: {
                            userId: '$_id',
                            nickName: '$nickName',
                            phone: '$phone',
                            avatarUrl: '$avatarUrl',  
                        },
                    })
                    .done(),
                as: 'userList', // 输出的数组字段名
      })
      .replaceRoot({
        newRoot: $.mergeObjects([ $.arrayElemAt(['$userList', 0]), '$$ROOT' ])
       })
      .project({
        userList: 0,
       })
      .end()
    
    // 亲测
    
    2020-09-12
    有用
    回复
  • 郑旭东
    郑旭东
    2020-09-01

    lookup:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/reference-sdk-api/database/aggregate/Aggregate.lookup.html

    lookup性能很差,相当于嵌套查询。可以考虑把user表里的内容适当冗余到info表中,查询时直接单表输出。

    2020-09-01
    有用
    回复 1
    • 27
      27
      2020-09-01
      好的,感谢。

      现在是冗余到 info 表中的,不过由于用户的头像、手机号等信息会更新,所以导致 info 表里的数据有的是不准的。
      2020-09-01
      回复
登录 后发表内容
问题标签