2016-06-27 2 views
1

Я создал запрос mongodb, который я должен использовать в контроллере laravel. Я попытался преобразовать в Laravel 5.Как преобразовать запрос MongoDB в Laravel 5?

Мой запрос выглядит следующим образом:

db.project_Data.aggregate(
    { 
     $project:{ 
      UPSTempStatus:1 
     } 
    }, 
    { 
     $unwind : "$UPSTempStatus" 
    }, 
    { 
     $match: 
     { 
      UPSTempStatus: {$ne:null} 
     } 
    }, 
    { 
     $group : { 
      _id:null, 
      totalcount : {$sum:1}, 
      LowTemp: { 
       $sum:{ 
        $cond:[{$eq:["$UPSTempStatus",0]},1,0] 
        }}, 
      HighTemp: { 
       $sum:{ 
        $cond:[{$eq:["$UPSTempStatus",2]},1,0] 
        }}, 
      NormalTemp: { 
       $sum:{ 
        $cond:[{$eq:["$UPSTempStatus",1]},1,0] 
        }}, 
      Error4: { 
       $sum:{ 
        $cond:[{$eq:["$UPSTempStatus",4]},1,0] 
        }}, 
      Error5: { 
       $sum:{ 
        $cond:[{$eq:["$UPSTempStatus",5]},1,0] 
        }}, 
    }}, 
    {$project: 
    { 
     LowTempPer:{ 
      $multiply:[{ $divide: ["$LowTemp","$totalcount"]},100] 
     } , 
     NormalTempPer:{ 
      $multiply:[{ $divide: ["$NormalTemp","$totalcount"]},100] 
     }, 
     HighTempPer:{ 
      $multiply:[{ $divide: ["$HighTemp","$totalcount"]},100] 
     } 
    }} , 
    {$sort: {_id:-1}} 
); 

Я пытаюсь использовать Laravel сырец, но шоу ошибку как Unrecognized parameter to $cond: $eq. Я не знаю, как скрываться в Laravel 5.2.

В Laravel 5.2

$result = project_Data::raw(function ($collection){ 
     return $collection->aggregate(array(
      array('$project' => array('UPSTempStatus' =>1)), 
      array('$unwind' => '$UPSTempStatus'), 
      array('$match' => array('UPSTempStatus' => array('$ne' => null))), 
      array('$group' => array(
       '_id' => null, 
       'totalcount' => array('$sum' => 1), 
       'LowTemp' => [ '$sum' => [ '$cond' => [ [ '$eq' => [ '$UPSTempStatus', 0 ] ], 1, 0 ] ] ], 
       'HighTemp' => [ '$sum' => [ '$cond' => [ [ '$eq' => [ '$UPSTempStatus', 2 ] ], 1, 0 ] ] ], 
       'NormalTemp' => [ '$sum' => [ '$cond' => [ [ '$eq' => [ '$UPSTempStatus', 1 ] ], 1, 0 ] ] ], 
       'Error4' => [ '$sum' => [ '$cond' => [ [ '$eq' => [ '$UPSTempStatus', 4 ] ], 1, 0 ] ] ], 
       'Error5' => [ '$sum' => [ '$cond' => [ [ '$eq' => [ '$UPSTempStatus', 5 ] ], 1, 0 ] ] ] 
      )), 
      array('$project' => array(
       'LowTempPer' => array('$multiply' => array('$divide' => array('$LowTemp', '$totalcount'), 100)), 
       'NormalTempPer' => array('$multiply' => array('$divide' => array('$NormalTemp', '$totalcount'), 100)), 
       'HighTempPer' => array('$multiply' => array('$divide' => array('$HighTemp', '$totalcount'), 100)), 
      )), 
      array(
       '_id' => -1 
      ) 
     )); 
    })->toArray(); 

После coverting в Laravel получить ошибки ответ this object is already an operator expression, and can't be used as a document expression (at '0') Пожалуйста, предложите мне, как решить эту проблему или, как преобразовать в Laravel запрос?

+0

@chridam я обновить вопрос –

+0

Любая конкретная причина, почему вы смешиваете квадратной скобки обозначения массива '[]' 'с массива()' нотации? – chridam

+0

@chridam Да, потому что, если я использую массив instated из [], получите ошибку «Unrecognized parameter to $ cond: $ eq» –

ответ

1

Попробуйте это:

$result = project_Data::raw(function ($collection){ 
      return $collection->aggregate(array(
       array('$project' => array('UPSTempStatus' =>1)), 
       array('$unwind' => '$UPSTempStatus'), 
       array('$match' => array('UPSTempStatus' => array('$ne' => null))), 
       array('$group' => array(
        '_id' => null, 
        'totalcount' => array('$sum' => 1), 
        'LowTemp' => [ '$sum' => [ '$cond' => [ [ '$eq' => [ '$UPSTempStatus', 0 ] ], 1, 0 ] ] ], 
        'HighTemp' => [ '$sum' => [ '$cond' => [ [ '$eq' => [ '$UPSTempStatus', 2 ] ], 1, 0 ] ] ], 
        'NormalTemp' => [ '$sum' => [ '$cond' => [ [ '$eq' => [ '$UPSTempStatus', 1 ] ], 1, 0 ] ] ], 
        'Error4' => [ '$sum' => [ '$cond' => [ [ '$eq' => [ '$UPSTempStatus', 4 ] ], 1, 0 ] ] ], 
        'Error5' => [ '$sum' => [ '$cond' => [ [ '$eq' => [ '$UPSTempStatus', 5 ] ], 1, 0 ] ] ] 
       )), 
       array('$project' => array(
        '_id' =>0, 
        'LowTempPer' => array('$multiply' => array(100, array('$divide' => ['$LowTemp', '$totalcount']))), 
        'HighTemp' => array('$multiply' => array(100, array('$divide' => ['$HighTemp', '$totalcount']))), 
        'NormalTemp' => array('$multiply' => array(100, array('$divide' => ['$NormalTemp', '$totalcount']))) 
       )) 
      )); 
     }); 
+0

работает отлично спасибо вам большое @sandip kakade –

+0

приветствуется :) @ user3663481 –

+0

Сработало: @sandip –

Смежные вопросы