首页 文章

使用_id作为PHP中的foreignField进行MongoDB $查找

提问于
浏览
0

我在这张 table 上敲打太久了...

我有两个MongoDB集合:“聊天室”和“用户” . “聊天室”集合具有指向“用户”集合中的特定单个用户的“user_id”键 .

我试图用一个使用$ lookup聚合查询的用户来获取聊天室,我现在拥有的是这个:

$this->mongo->chatroom->aggregate(
    array('$lookup' => array(
        'from' => 'users',
        'localField' => 'user_id',
        'foreignField' => '_id',
        'as' => 'user'
    ))
);

但是,这会在集合中返回一个空的“user”字段 . 奇怪的是,如果我尝试将“_id”替换为自定义“uid”设置为_id . $ id的值,它将按预期工作:

$this->mongo->chatroom->aggregate(
    array('$lookup' => array(
        'from' => 'users',
        'localField' => 'user_id',
        'foreignField' => 'uid', // uid = _id.$id
        'as' => 'user'
    ))
);

我发现问题是“_id”是ObjectId而“user_id”是String . 但我不知道如何很好地处理这个问题......

1 回答

  • 0

    为了回答我自己的问题,我通过使“user_id”成为“MongoId”类的实例而不是普通的字符串来解决这个问题 . 基本上,我将“user_id”存储为:

    $mongoObject["user_id"] = new MongoId($this->user_id);
    

    另一个解决方案可能是用“uid”字段装饰对象,其值等于“_id . $ id” .

相关问题