2016-05-13 22 views
0

我使用jenssegers/laravel-mongodb。我把范围Laravel-MongoDB,如何通过相关命令得到结果

public function scopeWhereFullText($query, $search) 
    { 
     return $query->whereRaw(['$text' => ['$search' => $search]],['score'=>['$meta'=>'textScore']]); 
    } 

我怎么能在MongoDB中JS例如ORDER BY得分字段,如:

db.products.find({$text:{$search:"SomeText"}},{score:{$meta:'textScore'}}).sort({score:{$meta:'textScore'}}) 

回答

0

什么是没有拐杖的解决方案:

public function scopeWhereFullText($query, $search) 
{ 
    $query->getQuery()->projections = ['score'=>['$meta'=>'textScore']]; 

    return $query->whereRaw(['$text' => ['$search' => $search]]); 

} 

,并在结果

$products = Product::whereFullText($request->get('q','')) 
        ->orderBy('score',['$meta'=>'textScore'])->get(); 

$max = $products->max('score'); 
$min = $products->min('score'); 

$products = $products->filter(function($item) use($max,$min){ 
    return $item->score > ($max+$min)/2; 
});