$ expr arrayElementAt não funciona em agregação para documento incorporado
Estou fazendo agregação 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)
)
)
)
);
Tenho uma coleção que contém dados 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"),
...
}
O código acima está funcionando para concatenação fina de três tipos de nomes e pesquisando todos os dados passados em$arg
. Note que eu adicioneiarray('$arrayElemAt' => array('$allotment_details.room_id', -1)), $this->RoomId))
para buscar alunos com base na concatenação de nomes e esses alunos devem ser buscados com base em$this->RoomId
.
O código acima não está buscando alunos atribuídos a uma sala, mas está buscando todos os alunos com base na concatenação de nomes. Por favor ajude !!