2016-04-07 23 views
-1

Projemde jenssegers/laravel-mongodb paketi kullanıyorum. Laravel Lümen mikro çerçevede geliştirilen benim projem, şimdi nasıl benLumen'deki Mongo sorgusunu kullanın

db.orders.aggregate([ 
{ 
    '$match': { 
     'status': 'suspend' 
    } 
}, 
{ 
    '$project':{ 
     'min_diff': { 
      '$ceil': { 
       '$divide': [ 
        { 
         '$subtract': [ 
          new Date(), 
          '$created_at' 
         ] 
        }, 
        60 * 1000 
       ] 
      } 
     } 
    } 
}, 
{ 
    '$match': { 
     '$or': [ 
      { 
       'min_diff': { 
        '$gt': 5, 
        '$lte': 10 
       }, 
       'latitude': { 
        '$gte': '{MIN_LAT}', 
        '$lte': '{MAX_LAT}' 
       }, 
       'longitude': { 
        '$gte': '{MIN_LON}', 
        '$lte': '{MAX_LON}' 
       } 
      }, 
      { 
       'min_diff': { 
        '$gt': 10, 
        '$lte': 15 
       }, 
       'latitude': { 
        '$gte': '{MIN_LAT}', 
        '$lte': '{MAX_LAT}' 
       }, 
       'longitude': { 
        '$gte': '{MIN_LON}', 
        '$lte': '{MAX_LON}' 
       } 
      } 
     ] 
    } 
} 
]) 

Bildirimi lümen içinde jenssegers/laravel-mongodb paketi ile darbe Mongo sorgusu kullanabilirsiniz: my Lümen sürüm 5.2 ve MongoDB sürüm 3.2

cevap

0

I Bu çözüm bulundu:

$time_5_min_ago = Carbon::now()->subMinute(5); 
    $time_10_min_ago = Carbon::now()->subMinute(10); 
    $time_15_min_ago = Carbon::now()->subMinute(15); 
    $time_20_min_ago = Carbon::now()->subMinute(20); 

    return Order::where(function ($query) use ($maxLat_try_one,$minLat_try_one,$maxLon_try_one,$minLon_try_one,$time_5_min_ago,$time_10_min_ago) { 
     $query->whereBetween('source_longitude', [$minLon_try_one, $maxLon_try_one]) 
      ->whereBetween('source_latitude', [$minLat_try_one,$maxLat_try_one]) 
      ->where('status', '=', 'pending') 
      ->where('created_at', '<', $time_5_min_ago) 
      ->where('created_at', '>=', $time_10_min_ago); 
    })->orWhere(function ($query) use ($maxLat_try_two,$minLat_try_two,$maxLon_try_two,$minLon_try_two,$time_10_min_ago,$time_15_min_ago) { 
     $query->whereBetween('source_longitude', [$minLon_try_two, $maxLon_try_two]) 
      ->whereBetween('source_latitude', [$minLat_try_two,$maxLat_try_two]) 
      ->where('status', '=', 'pending') 
      ->where('created_at', '<', $time_10_min_ago) 
      ->where('created_at', '>=', $time_15_min_ago); 
    })->orWhere(function ($query) use ($maxLat_try_three,$minLat_try_three,$maxLon_try_three,$minLon_try_three,$time_15_min_ago,$time_20_min_ago) { 
     $query->whereBetween('source_longitude', [$minLon_try_three, $maxLon_try_three]) 
      ->whereBetween('source_latitude', [$minLat_try_three,$maxLat_try_three]) 
      ->where('status', '=', 'pending') 
      ->where('created_at', '<', $time_15_min_ago) 
      ->where('created_at', '>=', $time_20_min_ago); 
    })->get($fields);