2016-03-31 13 views
1

チームPHP Mongoの集計マッチ正規表現

チーム文書構造の名前

{ 
    "_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')))); 
上のチームを探して 'のような/のmysql' をシミュレートし、クエリを実行します

これを修正する方法がわからないことに気付いているように感じます。 mongoに移行した後に正規表現を使用しましたが、agg-matchの組み合わせでは使用していません。

+0

これはあなたが探しているものです:http://stackoverflow.com/questions/16252208/how-to-use-regex-in-mongodb-aggregation-query-within-match –

+0

私の状況に適したポストを見つけました'新しいMongoRegex($ q)'を使用して問題を修正しました – battlenub

答えて

0

私のケースでは、where句を設定できない集計結果を見つけているので、$ sort $ unwind $ orderbyなどの集約関数を使用しています。上記のすべてを使用していますが、問題があります私は私が次の集約フレームワークにgo the aggregation framework

を読んだとき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) 
     ); 
    } 

で$マッチを使用してのように、私は解決策を持って実施している%STR%ここに私のコードのような文字列にマッチするようなものであなたの問題を解決するためのソリューションが得られることを願っています。