PHP Mongo聚合匹配正则表达式

PHP Mongo聚合匹配正则表达式,php,mongodb,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 }, {

执行模拟“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之前,我使用过regex,但没有使用agg-match组合。

在我的例子中,我发现聚合结果中无法设置where子句,因此使用聚合函数,如$sort$unwind$orderby等。我正在使用上述所有函数,类似的东西在匹配类似于%str%的字符串在这里是我的代码,我在其中使用$match with 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)
        );
    }
当我阅读下面的聚合框架时,我得到了解决方案


我希望你能找到解决问题的办法

这就是你要寻找的:找到适合我情况的帖子并使用“new MongoRegex($q)”修复了我的问题对于那些使用php制作mongo正则表达式的绊脚石,选项应该与正则表达式模式分开。类似于
['$match'=>['$regex'=>'^.'$pattern....'.''.'.'$options'=>'i'].
。更多细节