我在使用jenssegers在laravel中创建查询时遇到了麻烦。以前我有使用此查询的文章
return Article::where('content', 'LIKE', '%robots%')->get()
效果很好,但是由于没有加入mongo,我不得不求助于$lookup
和$match
,现在我的查询看起来像这样
$regex = '/.*'.$searchTerm.'.*/';
$articles = Article::raw(function ($collection) use ($regex) {
return $collection->aggregate(
[
[
'$match' => [
'$or' => [
[
'full_url' => [
'$regex' => $regex,
'$options' => 'i'
]
],
[
'content' => [
'$regex' => $regex,
'$options' => 'i'
]
],
[
'summary' => [
'$regex' => $regex,
'$options' => 'i'
]
],
[
'title' => [
'$regex' => $regex,
'$options' => 'i'
]
],
],
],
],
[
'$lookup' => [
'as' => 'pubs',
'from' => 'publications',
'foreignField' => '_id',
'localField' => 'pub_id',
],
],
[
'$sort' => [
'date' => -1,
],
]
]
);
});
return $articles;
使用此查询搜索“机器人”将产生结果,但是搜索“机器人”现在不返回任何内容,我也尝试将正则表达式修改为'/'.$searchTerm.'/';
,但这似乎无济于事。与'/^'.$searchTerm.'$/';
相同。 $ searchTerm只是一个变量,其中包含要搜索的字符串。有人可以指出我在这里做错什么,即查询语法或正则表达式格式不正确。还是没有$ match还有另一种方法?任何帮助,将不胜感激。谢谢。