我在这张桌子上敲打太久了......
我有两个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。但我不知道如何很好地处理这个问题...
答案 0 :(得分:0)
为了回答我自己的问题,我通过将“user_id”作为“MongoId”类的实例而不是普通字符串来解决问题。基本上,我将“user_id”存储为:
$mongoObject["user_id"] = new MongoId($this->user_id);
另一个解决方案可能是用“uid”字段装饰对象,其值等于“_id。$ id”。