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

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

阅读 721
1 个回答

两种解决方案:

方法一:使用ThinkPHP5的field()明确指定字段

在联合查询中通过field()方法指定需要的字段:

$data = Db::connect('mongo')->name('circle')
    ->alias('u') // 设置表别名
    ->join('circle_comments p', 'u.id = p.circle_id') // 联合查询
    ->field('u.type, p.content') // 明确指定需要的字段
    ->select(); // 执行查询

核心步骤:

  1. 使用alias()为第一个表设置别名。
  2. 使用join()方法关联第二个表并设置其别名。
  3. field()中明确列出所需字段,避免遗漏。
  4. 最后通过select()方法执行查询。

方法二:使用MongoDB的聚合框架$lookup进行联合查询

通过MongoDB原生聚合框架实现字段关联查询:

$data = Db::connect('mongo')->name('circle')->aggregate([
    [
        '$lookup' => [
            'from' => 'circle_comments',
            'localField' => 'id',
            'foreignField' => 'circle_id',
            'as' => 'comments' // 将关联数据保存到comments字段
        ]
    ],
    [
        '$project' => [
            'type' => 1, // 获取第一个表的字段
            'comments.content' => 1 // 获取关联表的字段
        ]
    ]
]);

核心步骤:

  1. 使用$lookup将第二个表的数据与第一个表进行关联。
  2. 通过localFieldforeignField设置对应关系。
  3. 使用$project指定返回的字段内容。

这两种方法适用于不同的需求场景:

  • 方法一适合较简单的联合查询操作。
  • 方法二适合复杂的关联查询,尤其是需要使用MongoDB的灵活特性时。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题