PHP Mongo聚合匹配正则表达式

时间:2016-03-31 21:26:13

标签: php mongodb

执行模拟&like; / mysql'的查询。搜索团队名称的团队

团队文档结构

{
    "_id": 9,
    "name": "azerty",
    "tag": "dsfds",
    "desc": "ggdfgsdfgdfgdf",
    "captain": 8,
    "coach": 8,
    "members": [{
        "date_joined": "2016-03-31 15:22:09",
        "user_id": 8
    }, {
        "date_joined": "2016-03-31 19:22:35",
        "user_id": 9
    }],
    "current_invites": [{
        "invite_id": 21,
        "username": "Nikki",
        "user_id": "9",
        "status": 1,
        "date_invited": "2016-03-31 18:32:40"
    }, {
        "invite_id": 22,
        "username": "Nikki",
        "user_id": "9",
        "status": 2,
        "date_invited": "2016-03-31 18:33:16"
    }]
}

PHP代码=

$q = '/.*'.$q.'*./';
$result = $this->coll->aggregate(
           array('$match' => array('name' => $q)),
           array('$project' => array('name' => 1,'members' => array('$size' => '$members'))));

感觉我疯了,不知道如何解决这个问题。 在迁移到mongo之后使用了正则表达式,但没有使用agg-match的组合。

1 个答案:

答案 0 :(得分:0)

在我的情况下,我发现你不能设置where子句的聚合结果,所以使用聚合函数,如$ sort $ unwind $ orderby等等我正在使用上面提到的所有内容并且遇到问题喜欢匹配字符串的东西像%str%这里我的代码我使用$ match与MongoRegex实现类似

public function getRecords($table,$where = array(),$like_key = false,$like_value = false,$offset = 1,$limit = 10,$order_column = false,$order_type = false, $isAggregate=false,$pipeline=array()){
    $temp = $this->getMongoDb()->where($where);
    if($like_key && $like_value){
        $temp = $temp->like($like_key,$like_value);
        // this like filter is for aggregated result work both on normal get record or by aggregated result
        $pipeline[]=array(
            '$match' => array( $like_key => new MongoRegex( "/$like_value/i" ) )
        );
    }
    if($order_column && $order_type){
        $order_by = array();
        $order_by[$order_column] = $order_type;
        $temp = $temp->order_by($order_by);

        $pipeline[]=array(
            '$sort'=>array($order_column => ($order_type =="desc")? -1 : 1)
        );
    }

当我阅读以下聚合框架go the aggregation framework

时,我得到了解决方案

我希望您能获得解决问题的解决方案。