MongoDB поиск с присоединением к полю из $ или - PullRequest
0 голосов
/ 24 августа 2018

У меня есть две коллекции, первая - 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, в другое поле, которое я позже смогу использовать для поиска?

...