目前了解到的表关联查询方式有两种
$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返回去,不知道咋整