Ok, o truque foi a estrutura de agregação, especificamente descontrair .
> db.mytest.aggregate({$unwind: '$top'},
{$unwind: '$top.nest'},
{$match: {'top.nest.p': 6}}
)
Embora no caso de eu ter várias subcorrespondências em um único objeto, isso retornaria vários resultados em vez de em sua forma agrupada original. Suponho que posso colocar um
$group
no encanamento, no entanto. Embora os links relacionados eu encontrei sugerissem o redesenho do esquema como a única correção completa no momento, então isso é definitivamente melhor do que nada.