$ expr arrayElement: no funciona en la agregación para el documento incrustado
Estoy haciendo la agregación de mongo db como
$cursor = $this->collection->aggregate(
array(
array(
'$project' => array(
'FullName' => array('$concat' => array('$first_name', ' ', '$middle_name', ' ', '$last_name')),
'FirstMiddle' => array('$concat' => array('$first_name', ' ', '$middle_name')),
'FirstLast' => array('$concat' => array('$first_name', ' ', '$last_name')),
'FirstName' => array('$concat' => array('$first_name')),
'MiddleName' => array('$concat' => array('$middle_name')),
'LastName' => array('$concat' => array('$last_name')),
'Student' => '$ROOT'
)
),
array(
'$match' =>
array(
'$or' => array(
array("FullName" => new MongoDB\BSON\Regex($arg, 'i')),
array("FirstLast" => new MongoDB\BSON\Regex($arg, 'i')),
array("FirstMiddle" => new MongoDB\BSON\Regex($arg, 'i')),
array("FirstName" => new MongoDB\BSON\Regex($arg, 'i')),
array("MiddleName" => new MongoDB\BSON\Regex($arg, 'i')),
array("LastName" => new MongoDB\BSON\Regex($arg, 'i')),
array("Student.registration_temp_perm_no" => $arg),
'$expr' => array(
'$eq'=> array(
array('$arrayElemAt' => array('$allotment_details.room_id', -1)), $this->RoomId)),
),
// "Student.assigned_keys" => ['$exists' => false],
"Student.schoolId" => new MongoDB\BSON\ObjectID($this->SchoolId)
)
)
)
);
Tengo una colección que contiene datos como
"first_name": "John",
"middle_name": "",
"last_name": "Mayor",
"allotment_details": [
{
"allotment_id": "ff666d55-2fcc-79b2-e4da-e165939555bb",
"room_id": "5be2d9aad2ccda0fdc006a65",
"bay_id": ObjectId("5be2d9aad2ccda0fdc006a61"),
...
}
El código anterior funciona para la concatenación fina de tres tipos de nombres y busca todos los datos pasados en$arg
. Tenga en cuenta que he agregadoarray('$arrayElemAt' => array('$allotment_details.room_id', -1)), $this->RoomId))
para buscar estudiantes en función de la concatenación de nombres y esos estudiantes deben buscarse en función de$this->RoomId
.
El código anterior no recupera a los alumnos asignados a una sala, sino que recupera a todos los alumnos en función de la concatenación de nombres. Por favor ayuda !!