O método que você usa atualmente é chamado de modelo de lista de adjacência.
Outro modelo para armazenar dados hierárquicos em um banco de dados (relacional) é o modelo de conjunto aninhado. Sua implementação em bancos de dados SQL é bem conhecida. Consulte também este artigo para o algoritmo de passagem de árvore de pré-ordem modificado.
Um método muito simples:você pode armazenar um caminho por objeto - com eles deve ser fácil consultar árvores em bancos de dados NOSQL:
{ path: "Color", ... }
{ path: "Color.Red", ... }
{ path: "Color.Red.Apple", ... }
{ path: "Color.Red.Cherry", ... }
Quando os nós forem removidos ou renomeados, alguns caminhos devem ser atualizados. Mas, em geral, esse método parece promissor. Você só precisa reservar um caractere especial como separador. A sobrecarga de espaço de armazenamento deve ser insignificante.
edit:este método é chamado de caminho materializado
Finalmente, aqui está uma comparação de diferentes métodos para dados hierárquicos em bancos de dados NOSQL.