По моему здесь хорошо подходят вложенные документы
EmbeddedDocument
Пример:
class MenuItem(EmbeddedDocument):
name = StringField()
url = StringField()
sub = ListField(EmbeddedDocumentField('self'))
class Menu(Document):
items = ListField(EmbeddedDocumentField(MenuItem))
Соответственно этой модели должно хватить на все меню с подразделами. Вместо url можно использовать slug и генерить урл в зависимости от глубины вхождения подпункта меню.