mongodb两个表联查字段不显示?

用thinkphp5操作mongodb数据,在做联合查询的时候,第二个表中的字段获取老是不显示出来?请教高手如何获取出来?

阅读 395
1 个回答
MongoDB不支持传统SQL的JOIN操作,要使用MongoDB的聚合管道(Aggregation Pipeline)来实现类似的功能
$data = Db::connect('mongo')->name('circle')
    ->alias('u')
    ->aggregate([
        [
            '$lookup' => [
                'from' => 'circle_comments', // 关联的表名
                'localField' => 'id',        // 主表 circle 的字段
                'foreignField' => 'circle_id', // 关联表 circle_comments 的字段
                'as' => 'comments'           // 关联结果的别名
            ]
        ],
        [
            '$unwind' => [
                'path' => '$comments',      // 展开 comments 数组
                'preserveNullAndEmptyArrays' => true // 相当于 LEFT JOIN,即使没有匹配的记录也保留主表记录
            ]
        ],
        [
            '$project' => [
                'type' => 1,                // 保留主表的 type 字段
                'content' => '$comments.content', // 获取关联表的 content 字段
                '_id' => 0                  // 不显示 MongoDB 默认的 _id 字段
            ]
        ]
    ])
    ->select();

print_r($data);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题