PHP Mongo聚合匹配正则表达式
执行模拟“like/mysql”搜索团队名称的查询 团队文档结构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 }, {
{
"_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'].
。更多细节