Cómo construir una estructura recursiva con MongoDB

Estoy tratando de hacer algo generalmente simple con SQL (con clave externa en la misma tabla, por ejemplo) (puede ser tan fácil con MongoDB, simplemente no lo sé) que consiste en construir una estructura de datos recursiva.

Para este ejemplo, voy a hablar sobre las páginas en un sitio web. Me gustaría hacer una estructura de página de múltiples niveles. Entonces podría haber:

  • Casa
  • Nuestros productos
    • Producto 1
    • Producto 2
  • Sobre nosotros
    • ¿Dónde estamos?
    • Contáctenos

Digamos que las páginas tendrían un título y un contenido.

Necesito saber cuál es la mejor manera de hacer esto y también cómo podría crear un mapa del sitio basado en esa estructura de datos (página que muestra cada página de cada nivel).

Estoy creando una aplicación node.js con MongoDB para este caso.

EDITAR: ¿No funcionaría simplemente haciendo referencia a una página principal en cada página? Las páginas serían como { title: 'test', content: 'hello world', parentPage: ObjectID(parent page) }

¡Gracias por la ayuda!

Necesitará saber cómo desea acceder a sus datos.

La última vez que usé una estructura de árbol implementé esto (me inspiré en varias fonts) en Ruby, almacena una ruta _id y el uri completo (títulos de página slugified), es un dolor manejar estructuras como esta.

Por otro lado, puede crear una colección de documentos (raíces) y documentos incrustados (twigs y hojas). Es más sencillo de manejar, pero tendrá que obtener todo el árbol al realizar consultas, y puede consultar los documentos internos solo si sabe qué tan profundo es.

De mis experiencias pasadas, todo el trabajo para soportar una estructura de árbol no vale la pena (a menos que sea un requisito), la mayoría de los usuarios crearán una estructura suelta basada más en tags que en categorías fijas.

Personalmente, implementaría una estructura de rutas materializadas aquí, es muy fácil de actualizar y consultar utilizando expresiones regulares sin distinción de mayúsculas (lo que significa que usará un índice), por lo que un ejemplo sería:

 {_id: {}, path: 'about_us/where_are_we'} 

Esto también, como puede ver, permite que las URLs amigables con SEO se peguen directamente en este árbol y le ofrezcan la máxima potencia. Esto es particularmente útil en los sistemas de ayuda donde te gusta mostrar una URL como:

 /help/how-to-use-my-site 

Ya que how-to-use-my-site puede impactar directamente en la ruta o incluso más, puede alojar dos campos y directamente sobre el texto completo como:

 {_id: {}, path: 'about_us/where_are_we', normalised_url: 'where_are_we'} 

Por supuesto, como decía la respuesta anterior, debe saber cómo desea acceder a su contenido, pero en mi opinión, las rutas materializadas son un buen comienzo.

Puede leer más sobre estructuras de árboles en Mongo aquí: http://www.mongodb.org/display/DOCS/Trees+in+MongoDB

    Intereting Posts