Php MongoDB查找,从$or加入字段

Php MongoDB查找,从$or加入字段,php,mongodb,php-mongodb,Php,Mongodb,Php Mongodb,我有两个收藏,第一个是friend_list,如下所示: user_id: int friend_id: int status: string user_id: int username: string etc. [ [ '$match' => [ 'friend_id' => $userId, 'status' => ['$in' => [FriendStatus::ACTIVE, FriendStatus::PE

我有两个收藏,第一个是friend_list,如下所示:

user_id: int
friend_id: int
status: string
user_id: int
username: string
etc.
[
    [
      '$match' => [
        'friend_id' => $userId,
        'status' => ['$in' => [FriendStatus::ACTIVE, FriendStatus::PENDING]]
      ]
    ],
    [
      '$lookup' => [
        'from' => 'user_data', 
        'localField' => 'user_id', 
        'foreignField' => 'user_id', 
        'as' => 'user_data'
      ]
    ]
  ]
第二个集合包含用户数据,如下所示:

user_id: int
friend_id: int
status: string
user_id: int
username: string
etc.
[
    [
      '$match' => [
        'friend_id' => $userId,
        'status' => ['$in' => [FriendStatus::ACTIVE, FriendStatus::PENDING]]
      ]
    ],
    [
      '$lookup' => [
        'from' => 'user_data', 
        'localField' => 'user_id', 
        'foreignField' => 'user_id', 
        'as' => 'user_data'
      ]
    ]
  ]
我需要获取给定用户ID的所有朋友的用户数据。问题是,此用户可以是朋友ID或用户ID,这取决于谁发起了友谊。我提出了这样的要求:

user_id: int
friend_id: int
status: string
user_id: int
username: string
etc.
[
    [
      '$match' => [
        'friend_id' => $userId,
        'status' => ['$in' => [FriendStatus::ACTIVE, FriendStatus::PENDING]]
      ]
    ],
    [
      '$lookup' => [
        'from' => 'user_data', 
        'localField' => 'user_id', 
        'foreignField' => 'user_id', 
        'as' => 'user_data'
      ]
    ]
  ]
但是我需要使用
'$或'=>[['friend\u id'=>$userId],'user\u id'=>$userId]]而不是
'friend\u id'=>$userId
。但这对查找中的
“localField”=>“user\u id”
不起作用

我认为这可以用
$group
解决,但我不知道如何解决。
有没有一种方法可以将$group user\u id/friend\u id字段与其他字段的target user\u id不相等,以便我以后用于查找?

您的mongodb版本是什么?因为只有mongodb版本3.6及更高版本才有可能进行升级。我当前的版本是3.4.4,但有可能进行更新。您能将其升级到3.6或4.0吗?是的,已经在进行中。