1

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?

6
  • @chridam i update the question Commented Jun 27, 2016 at 9:03
  • Any specific reason why you are mixing the square bracket array notation [] with the array() notation? Commented Jun 27, 2016 at 9:06
  • @chridam Yes, because if i use array instated of [], get error "Unrecognized parameter to $cond: $eq" Commented Jun 27, 2016 at 9:09
  • Try this it might help.. Even though, I had some issues with this package as well but still it works fine. Laravel MongoDB Eloquent Commented Jun 27, 2016 at 9:21
  • @Abbasi i tried this but not working Commented Jun 27, 2016 at 9:25

1 Answer 1

1

Try this:

$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'])))
                ))
            ));
        });
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.