PHP + Mongodb usar match
Boa tarde, tenho uma collection no mongo com o nome disciplinas e o conteúdo é algo assim:
"ano" : 2001,
"inclusao" : {
"usuario" : {
"id_usuario" : 1,
"nome" : "Vladimir Ricardo Moresqui"
},
"data" : "2016-08-13 15:22:00"
},
"alteracao" : null,
"exclusao" : null,
"disciplinas" : [
{
"_id" : ObjectId("57b385ea631e4c43b7bcb7b4"),
"nome" : "História"
}
],
Para realizar a consulta dentro do mongo utilizo o seguinte script:
//Posso fazer assim
db.getCollection('questoes').aggregate([{$match:{"disciplinas.0.nome": "História"}}])
//Ou assim
db.getCollection('questoes').aggregate([{$match:{"disciplinas.nome": "História"}}])
Me retorna todas as questões da disciplina "História"
Meu problema está dentro do PHP, estou usando aggregate para buscar as informações do banco, se eu for buscar no campo ano consigo retornar normalmente, mas não consegui avançar quando tento retornar todas as questões disciplinas, pq o campo disciplina recebe um array.
$pipeline = [
array('$match' => array('disciplinas.0.nome' => 'História')),
[ '$sort' => ['nome' => 1 ]],
[ '$limit' => 5000],
];
$aggregate = new \MongoDB\Driver\Command([
'aggregate' => 'questoes',
'pipeline' => $pipeline,
]);
$rows = $mng->executeCommand('foco', $aggregate);
foreach ($rows as $row) {
array_push($aux, $row);
}
print_r(json_encode($aux));
O problema está em
array('$match' => array('disciplinas.0.nome' => 'História')),
Se eu fizer
array('$match' => array('ano' => 2001)),
Está me retornando, mas não estou conseguindo chegar até os dados da disciplina por ser um array.
Alguém já passou por essa dificuldade?
Obrigado!Discussão (0)
Carregando comentários...