I have some collection
**name lastname status**
Jack Nons "no"
Toni Griffon "no"
Anna Griffon "no"
Alex Maxvel "yes"
Nina Maxvel "yes"
I want to recieve the lastnames, which is not unique and where status is "yes".
My code wrote in php and I recieved all not unique lastnames but don't check status.
$cursor = $collection->aggregate(
array(
array(
'$group' => array("_id" => array('lastname' => '$lastname'), 'total' => array('$sum' => 1)
)
),
array(
'$match' => array('total' => array('$gt' => 1)
),
)
)
);
Please tell me how to add checking of status?
You can have multiple $match stages in the aggregation pipeline and multiple conditions in one $match operator.
It would be would faster to first filter documents that have 'status' == 'yes'
and then to group them. The $group operation will then have less documents to process:
$collection->aggregate(array(
array(
array(
'$match' => array('status' => 'yes'),
),
array(
'$group' => array(
"_id" => array('lastname' =>'$lastname'),
'total' => array('$sum' => 1)
)
)
)
);
You can put more than one condition into match.
'$match' => array('total' => array('$gt' => 1), 'status' => 'yes')