Acabo de terminar el libro "couchdb: una guía definitiva" y empecé a jugar con documentos de diseño. Sin embargo, hay una cosa que no entiendo. Todos los ejemplos que he visto hasta ahora son algo lineales.¿Cómo puedo llamar a otra vista en una vista de sofá?
{
"_id": "1",
"_rev": ".....",
"name": "first",
"something": "blue",
"child": "2"
}
{
"_id": "2",
"_rev": ".....",
"name": "second",
"something": "green",
"child": "3"
"parent" : "1"
}
{
"_id": "3",
"_rev": ".....",
"name": "second",
"something": "red",
"parent" : "2";
}
no tengo ningún problema escribiendo una vista, que devuelve todos los colores:: (!)
function(doc) {
if (doc.something) {
emit(doc.something,doc._id);
}
}
Pero lo que si quiero saber todos los descendientes (no
Ejemplo niños, perdón por mi error) por el elemento con _id = 1 ("algo": "azul")? Mi experiencia en programación me dice que debería usar recursividad, pero no sé cómo. ¿Cómo puedo llamar a otra función de vista desde una función de vista?
En general: surge este problema cuando se diseña una base de datos con referencias entre los documentos json. Más específicamente con una relación transitiva entre los elementos.
Editar: Para el ejemplo: sólo sé _id = 1 y el resultado debe ser algo como [_id = 2, _id = 3], ya que 2 es un hijo de 1 y 3 es un hijo de 2.
Necesito modelar una relación entre los elementos, como se describe. Sin embargo, tengo el lujo de mover la lógica en una aplicación web java, que de alguna manera es un envoltorio para la aplicación couchdb. Mi intención era mover tanta lógica como sea posible al documento de diseño de couchdb y evitar llamadas múltiples. Probaré los dos enfoques que mencionaste: a) múltiples llamadas a ("obtener el documento principal, obtener sus hijos, obtener sus hijos, etc.") yb) guardar la ruta completa (que es menos deseable) y ver cuál es más rápido/mejor. Gracias por la respuesta. –
Gracias por la pregunta. Aprendí cosas nuevas mientras respondía. Sería increíble si publicara sus hallazgos aquí (o en cualquier lugar de la web) cuando descubra qué es lo mejor para usted. –