我在这张 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 回答
为了回答我自己的问题,我通过使“user_id”成为“MongoId”类的实例而不是普通的字符串来解决这个问题 . 基本上,我将“user_id”存储为:
另一个解决方案可能是用“uid”字段装饰对象,其值等于“_id . $ id” .