I created mongodb query which I have to use in laravel controller. I tried to convert into Laravel 5.
My query is as follows:
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}}
);
I try to use Laravel raw but show error like Unrecognized parameter to $cond: $eq. I don't no how to covert in to Laravel 5.2.
In 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();
After coverting in laravel get response error is this object is already an operator expression, and can't be used as a document expression (at '0')
Please suggest me how to solve this or how to convert into laravel query?
[]with thearray()notation?