Я создал запрос 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 запрос?
@chridam я обновить вопрос –
Любая конкретная причина, почему вы смешиваете квадратной скобки обозначения массива '[]' 'с массива()' нотации? – chridam
@chridam Да, потому что, если я использую массив instated из [], получите ошибку «Unrecognized parameter to $ cond: $ eq» –