我有两个集合,第一个是friend_list,看起来像这样:
user_id: int
friend_id: int
status: string
第二个集合包含用户数据,如下所示:
user_id: int
username: string
etc.
我需要获取给定用户ID的所有朋友的用户数据。问题在于,该用户可以是friend_id或user_id,取决于谁发起了友谊。我提出了这样的请求:
[
[
'$match' => [
'friend_id' => $userId,
'status' => ['$in' => [FriendStatus::ACTIVE, FriendStatus::PENDING]]
]
],
[
'$lookup' => [
'from' => 'user_data',
'localField' => 'user_id',
'foreignField' => 'user_id',
'as' => 'user_data'
]
]
]
但是我需要使用'friend_id' => $userId
而不是'$or' => [['friend_id' => $userId], ['user_id' => $userId]]
。但这不适用于'localField' => 'user_id'
的查找。
我的想法是可以使用$group
解决此问题,但我不知道如何解决。
有没有一种方法可以将$ group user_id / friend_id字段不等于目标user_id转换为其他字段,以后可以用于查找?