У меня есть две коллекции, первая - friend_list, выглядит так:
user_id: int
friend_id: int
status: string
А вторая коллекция содержит пользовательские данные, выглядит так:
user_id: int
username: string
etc.
Мне нужно получить все данные пользователя друга для данного идентификатора пользователя. Проблема в том, что этот пользователь может быть 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, в другое поле, которое я позже смогу использовать для поиска?