Hi All,
I am trying to export mongod data into a flat file in a specific format using PHP. To do this, I am using following aggregate query in PHP script. I have basic knowledge to use mongo query in PHP script. But, I got below exception while running PHP application. Can anyone please help me to resolve this issue ?
From GenReport Cath Exception catched:
Code: 16021Message: Host:27017: exception: the $concat operator does not accept an object as an operand
MongoDB Query:
db.ohpublic.aggregate([{$match:{ts:{'$gte':ISODate('2014-08-04T00:00:00.000Z'),'$lt':ISODate('2014-08-05T00:00:00.000Z')},
'$or':[{'$and':[{channelType:'SMS'},{requestType:'INBOUND'},{eventId:{$in:['SMS_MO',null]}}]},
{'$and':[{apiName:{$in:['VOICE_IN_BOUND','VOICE_IN_BOUND_REJECT','VIRTUAL_NUMBER']}},{eventId:'release'}]},
{'$and':[{channelType:'SMS'},{requestType:'OUTBOUND'},{eventId:{$in:['SMS_MT','SMS_MT_PRO']}}]},
{'$and':[{channelType:'VOICE'},{requestType:'OUTBOUND'},{eventId:'release'}]}]}},
{$group:{_id:{day:{$dayOfMonth:'$ts'},month:{$month:'$ts'},year:{$year:'$ts'},userId:'$userId',serviceType:'$serviceType',status:'$status',
'Service':{'$concat':[
{'$cond':[{$and:[{$eq:['$channelType','SMS']},{$eq:['$requestType','OUTBOUND']},{'$or':[{$eq:['$eventId','SMS_MT']},{$eq:['$eventId','SMS_MT_PRO']}]}]},'SMS_MT','']},
{'$cond':[{$and:[{'$or':[{$eq:['$apiName','VOICE_IN_BOUND']},{$eq:['$apiName','VIRTUAL_NUMBER']},{$eq:['$apiName','VOICE_IN_BOUND_REJECT']}]},{$eq:['$eventId','release']}]},'VOICE_IN_BOUND','']},
{'$cond':[{'$and':[{$eq:['$channelType','SMS']},{$eq:['$requestType','INBOUND']},{$or:[{'$eq':['$eventId','SMS_MO']},{'$eq':['$eventId',null]}]}]},'SMS_MO','']},
{'$cond':[{$and:[{$eq:['$channelType','VOICE']},{$eq:['$requestType','OUTBOUND']},{$eq:['$eventId','release']}]},'VOICE_OUT_BOUND','']}]}},count:{$sum:1}}},
])
PHP Script:
$cursor=$db->ohpublic->aggregate(array(
array(
'$match' => array(
'ts' => array('$gte' => $start, '$lt' => $end),'$or'=>array(array(
'$and'=> array(array('channelType'=>'SMS','requestType'=>'INBOUND','eventId'=>array('$in' => array('SMS_MO',null)))),
'$and' => array(array('apiName' => array('$in' => array('VOICE_IN_BOUND','VOICE_IN_BOUND_REJECT','VIRTUAL_NUMBER')),array('eventId' => 'release'))),
'$and' => array(array('channelType' => 'SMS','requestType' => 'OUTBOUND','eventId' => array('$in' => array('SMS_MT','SMS_MT_PRO')))),
'$and' => array(array('channelType' => 'VOICE','requestType' => 'OUTBOUND','eventId' => 'release'))))
),
),
array(
'$group' => array(
'_id' => array('day' => array('$dayOfMonth' => '$ts'),'month' => array('$month' => '$ts'),'year' => array('$year' => '$ts'), 'userId' => '$userId', 'serviceType' => '$serviceType', 'status' => '$status',
'Service'=> array(
'$concat' => array(
'$cond' => array('$and' => array(array('$eq' => array('$channelType' => 'SMS'),array('$eq' => array('$requestType' => 'OUTBOUND')),
array('$or' => array(array('$eq' => array('$eventId'=>'SMS_MT'))),array('$eq' => array('$eventId' => 'SMS_MT_PRO'))))),'SMS_MT',''),
'$cond' => array('$and' => array(array('$or' => array(array('$eq'=> array('$apiName'=>'VOICE_IN_BOUND'),array('$eq' => array('$apiName' => 'VIRTUAL_NUMBER'),
array('$eq' => array('$apiName' => 'VOICE_IN_BOUND_REJECT'))))))),array('$eq' => array('$eventId'=>'release')),'VOICE_IN_BOUND',''),
'$cond' => array('$and' => array(array('$eq' => array('$channelType' => 'SMS'))),array('$eq' => array('$requestType' => 'INBOUND')),array(array('$or'=> array(array('$eq' => array('$eventId'=>'SMS_MO'))),array('$eq' => array('$eventId' => null)))),'SMS_MO',''),
'$cond' => array('$and' => array(array('$eq' => array('$channelType'=>'VOICE'))),array('$eq' => array('$requestType'=>'OUTBOUND')),array('$eq' => array('$eventId'=>'release')),'VOICE_OUT_BOUND','')
)
)
),'count' => array('$sum' => 1)
),
),
array('$limit' => 1000)
));
Best Regards,
Satya D