使用PHP的MongoDb Join查询

时间:2019-07-11 07:35:58

标签: php regex mongodb

我有两个文档,想要同时合并两个文档,并且想从合并表中获取数据。

例如,下面是主文件文档

{
    "_id" : ObjectId("5d11bab64d51f58dbbd391lm"),
    "title" : "Test test",
    "test_url" : "https://www.example.com/",

}

这是详细信息文档

{
    "_id" : ObjectId("5d1360536d94f726ec484426"),
    "master_id" : ObjectId("5d11bab64d51f58dbbd391lm"),
    "title" : "जेल में असलहा लहाराते हुए बदमाशों का वीडियो वायरल, गृह विभाग ने दी सफाई",
    "description" : "जिला कारागार में अपराधियों द्वारा असलहा लहराते हुए वीडियो सामने आया है।िला कारागार में अपराधियों द्वारा असलहा लहराते हुए वीडियो सामने आया है।िला कारागार में अपराधियों द्वारा असलहा लहराते हुए वीडियो सामने आया है।"

}

两个文档都与主文档的 _id master_id 链接。 我想加入该表,并想在详细文档中添加标题。

,在结果之后,我想添加查询以从合并文档中搜索数据。 下面是搜索查询。

$queryString = ".*".$queryString.".*";
$where = array(
    '$or' => array(
        array(
            'title' => new \MongoDB\BSON\Regex($queryString),
        ),
        array(
            'description' => new \MongoDB\BSON\Regex($queryString),
        ),
    )
);

1 个答案:

答案 0 :(得分:1)

您可以为此使用聚合管道

  1. 使用$lookup来加入两个集合
  2. $unwind来自$lookup阶段的结果数组
  3. $match进行正则表达式搜索

如果您还需要在regex文档的title中进行master搜索,则可以将其添加到$or的{​​{1}}查询中阶段,如果您不希望这样做,请不要忘记从$ or查询中删除(我已经添加了它)。

$match

现在,我的php并不是很好,我仍然设法为您编写了查询。请根据您的需要更改/修改代码。

问题是我给了您有关如何实现这一点的想法。希望有帮助。

修改

$pipeline = array( array( '$lookup' => array( 'from' => 'masters', 'localField' => '$master_id', 'foreignField' => '$_id', 'as' => 'master' ) ), array( '$unwind' => Array( 'path' => '$master', 'preserveNullAndEmptyArrays' => true ) ), array( '$match' => array( '$or' => array( array( 'title' => new \MongoDB\BSON\Regex($queryString), ), array( 'description' => new \MongoDB\BSON\Regex($queryString), ), array( 'master.title' => new \MongoDB\BSON\Regex($queryString), ), ) ) ), array( '$sort' => array( 'field_name' => 1 ) ), array( '$limit' => 10 ) ) $results = $details->aggregate($pipeline); sort中,使用$sort$limit流水线阶段,我在回答中添加了它。

请不要忘记将limit替换为您要对结果进行排序的实际字段。