Ok, l'astuce était le framework d'agrégation, spécifiquement unwind .
> db.mytest.aggregate({$unwind: '$top'},
{$unwind: '$top.nest'},
{$match: {'top.nest.p': 6}}
)
Bien que dans le cas où j'avais plusieurs sous-correspondances dans un seul objet, cela renverrait plusieurs résultats au lieu de leur forme groupée d'origine. Je suppose que je peux mettre un $group
dans le pipeline, cependant.
Bien que les liens connexes que j'ai trouvés suggèrent une refonte du schéma comme la seule solution complète à l'heure actuelle, c'est donc définitivement mieux que rien.