Estoy buscando un CouchDB equivalente a "SQL se une".La mejor manera de hacer uno-a-muchos "JOIN" en CouchDB
En mi ejemplo, hay documentos CouchDB que son elementos de la lista:
{ "type" : "el", "id" : "1", "content" : "first" }
{ "type" : "el", "id" : "2", "content" : "second" }
{ "type" : "el", "id" : "3", "content" : "third" }
existe un documento que define la lista:
{ "type" : "list", "elements" : ["2","1"] , "id" : "abc123" }
Como se puede ver el tercer elemento fue borrado, ya no es parte de la lista. Por lo tanto, no debe ser parte del resultado. Ahora quiero una vista que devuelva los elementos de contenido, incluido el orden correcto.
El resultado podría ser:
{ "content" : ["second", "first"] }
En este caso, el orden de los elementos ya es como debe ser. Otro resultado posible:
{ "content" : [{"content" : "first", "order" : 2},{"content" : "second", "order" : 1}] }
empecé a escribir la función de mapa:
map = function (doc) {
if (doc.type === 'el') {
emit(doc.id, {"content" : doc.content}); //emit the id and the content
exit;
}
if (doc.type === 'list') {
for (var i=0, l=doc.elements.length; i<l; ++i){
emit(doc.elements[i], { "order" : i }); //emit the id and the order
}
}
}
Esto es lo más lejos que pueda conseguir. ¿Puedes corregir mis errores y escribir una función de reducción? Recuerde que el tercer documento no debe ser parte del resultado.
Por supuesto, también puede escribir una función de mapa diferente. Pero la estructura de los documentos (un documento de elemento definido y un documento de entrada para cada entrada) no se puede cambiar.
EDITAR: No te pierdas el comentario de JasonSmith a su respuesta, donde describe cómo hacerlo más corto.
Word, esta es una minuciosa. Buen trabajo jhs! –
Es engañosamente largo. En realidad, el paso # 2 es una solución completa, sin embargo, sí, detallé los requisitos de fondo y las formas opcionales de agregar comodidad en el lado del cliente. – JasonSmith
La URL de CouchIO ha cambiado, aquí está la nueva para el mismo artículo: http://couchio.tumblr.com/post/446015664/whats-new-in-apache-couchdb-011-part-two – Bdoserror