Ok, el truco fue el marco de agregación, específicamente desenrollar .
> db.mytest.aggregate({$unwind: '$top'},
{$unwind: '$top.nest'},
{$match: {'top.nest.p': 6}}
)
Aunque en el caso de que tuviera múltiples subcoincidencias en un solo objeto, esto devolvería múltiples resultados en lugar de su forma agrupada original. Supongo que puedo poner un $group
sin embargo, en la canalización.
Aunque los enlaces relacionados que encontré sugirieron el rediseño del esquema como la única solución completa en este momento, definitivamente es mejor que nada.