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

时间:2016-02-20 02:56:09

标签: php mongodb

我在这张桌子上敲打太久了......

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

我正在尝试使用$ lookup聚合查询向用户提取聊天室,我目前拥有的是这个:

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

但是,这会在集合中返回一个空的“user”字段。奇怪的是,如果我尝试将自定义“uid”设置为_id。$ 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 :(得分:0)

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

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

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