Php 如何在MongoDb中将全文搜索与其他optinals匹配结合起来?

Php 如何在MongoDb中将全文搜索与其他optinals匹配结合起来?,php,laravel,mongodb,full-text-search,aggregate,Php,Laravel,Mongodb,Full Text Search,Aggregate,我尝试只使用一个查询和三种搜索方法查询我的收藏: 全文检索 经典搜索 搜索正则表达式 这3个匹配可以同时执行,也可以只执行其中一个。 正如我们所知,全文搜索是第一步。此全文搜索在我的聚合中是否可以是可选的?因为如果搜索的默认值为“”,则查询将返回任何数据。我需要数据来执行其他选项匹配。 这是我的Laravel 8控制器: Product::raw(函数($collection)使用($filters、$fullText、$likeKey、$likeValue){ 返回$collection-

我尝试只使用一个查询和三种搜索方法查询我的收藏:

  • 全文检索
  • 经典搜索
  • 搜索正则表达式
这3个匹配可以同时执行,也可以只执行其中一个。 正如我们所知,全文搜索是第一步。此全文搜索在我的聚合中是否可以是可选的?因为如果搜索的默认值为“”,则查询将返回任何数据。我需要数据来执行其他选项匹配。 这是我的Laravel 8控制器:

Product::raw(函数($collection)使用($filters、$fullText、$likeKey、$likeValue){
返回$collection->aggregate([
[        
“$match”=>
[
“$text'=>[”$search'=>$fullText],
],
],
[
“$match”=>$filters
],
[   
“$match”=>
[
$likeKey=>
[
“$regex”=>$likeValue,
“$options”=>“i”
]
]
],
[
“$addFields”=>
[
'avgReviews'=>['$avg'=>'$reviews.ranking'],
'价格'=>['$min'=>'$variants.price'],
“设备列表”=>[
“$reduce”=>[
'输入'=>'$devices.list.list',
“initialValue”=>[],
'在'=>
[
“$concatarray”=>[
“$$value”,
“$$this”
]
]           
]
]
],
]                           
]);
})
->当($operations,function($products)使用($operations)时{
foreach($key=>$operation的操作){
退货$products
->其中($operation[0],$operation[1],$operation[2]);
}
})
->forPage($page,$limit)
->sortBy($sortBy,SORT\u REGULAR,$order=='desc')
->值();

$filters
是一个数组,当它是唯一匹配项时可以正常工作。但是如果我想在不使用
$text
的情况下使用
$filters
,它会返回任何数据。在第三场比赛中,一切都不起作用。有人能帮我吗?

您需要根据可用条件有条件地构造查询,而不是总是将所有片段都包含在其中。谢谢,您说得对。我昨天在返回if条件之前找到了构建阵列的解决方案:)