MongoDB 中的数组字段 $lookup 技巧

在 MongoDB 中可以直接对数组字段进行 $lookup,完全不需要先将数组进行 $unwind

以下面的代码为例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
const userLevelRoles = await this.model('user').aggregate([
{
$match: {
userId: { $eq: userId }
}
},
// 用户与角色
{
$lookup: {
from: 'user_role',
localField: '_id',
foreignField: 'userId',
as: 'userRoles'
}
},
// 角色
{
$lookup: {
from: 'role',
localField: 'userRoles.roleId',
foreignField: '_id',
as: 'rolesOfUser'
}
}
])

从上面的查询中我们可以看到,第一个 $lookup 出来的 userRoles 是一个数组,当用这个字段再次进行查询时,只需要将它当成一个对象使用即可。