mongodb 表关联查询

目前了解到的表关联查询方式有两种

$lookup

使用方式 :

ctx.model.Friend.aggregate([
  {
    $lookup: {
      from: "user", // 关联user表
      localField: "friend", // 本表外键
      foreignField: "_id", // 匹配关联表的键
      as: "friend", // 查询出来的名称
    }
  },
  { $match: { paramsKey: params } } // 对查询出来的数据过滤
]);

这里给一个查询结果实例: 可以看到返回的数据里把关联的用户信息也返回了

{
  _id: "5f6215f9ae44f7208459c385",
  createTime: "2020-09-16T13:41:13.959Z",
  roomId: "69737583-ccad-4a45-a068-53c1b17b9e09",
  mine: "5f6215f9ae44f7208459c382",
  friend: {
    _id: "5f6213d863574421d42ab771",
    username: "222222",
    nickname: "李四",
    avatar: "https://c-ssl.duitang.com/uploads/item/201508/20/20150820003153_UwJfV.jpeg",
    userage: 0,
    usersex: 3,
    userphone: "",
    password: "123456"
  }
}

 

一种是populate

ctx.model.message.find({
    roomId: ctx.query.roomId
}).populate(key)

其中key是定义model时的字段名,关联其他表的ObjectId:下图是一个例子

friend: {
    type: mongoose.Schema.Types.ObjectId,
    ref: 'user'
}

但是这种方式查出来的数据不知道怎么用别名替代定义的字段名,比如我不想用friend这个名字,想用friends返回去,不知道咋整

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值