gpt4 book ai didi

PHP Mongo 聚合匹配正则表达式

转载 作者:可可西里 更新时间:2023-11-01 09:54:53 26 4
gpt4 key购买 nike

执行模拟“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 的组合。

最佳答案

在我的例子中,我找到了聚合结果,你不能在其中设置 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

我希望您能找到解决问题的方法。

关于PHP Mongo 聚合匹配正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36344119/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com