Estoy tratando de usar CouchDB para una nueva aplicación, y necesito crear una vista que clasifique por varios campos y también filtros por múltiples campos. Aquí hay un documento de ejemplo, he dejado el _id y _rev para ahorrarme algo de tipeo.Clasificación y filtrado de CouchDB en la misma vista
{
"title": "My Document",
"date": 1279816057,
"ranking": 5,
"category": "fun",
"tags": [
"couchdb",
"technology"
],
}
De la documentación, he aprendido que puedo crear fácilmente una vista que ordena por un campo como el ranking.
function(doc) {
emit(doc.ranking, doc);
}
También he aprendido que puedo filtrar fácilmente por campos, como categoría de
function(doc) {
emit(doc.category, doc);
}
http://127.0.0.1:5984/database/_design/filter/_view/filter?key=%22fun%22
mi problema es que tengo que hacer un montón de estas cosas, todo al mismo tiempo. Quiero filtrar según la categoría y también la etiqueta. Debería poder filtrar solo a documentos con categoría de "diversión" y etiqueta de "couchdb". Quiero ordenar los resultados filtrados clasificándolos en orden descendente, luego por fecha en orden ascendente y luego por título en orden alfabético.
¿Cómo puedo crear una vista que combine toda esa clasificación y filtrado combinados?
Gracias esto es realmente útil, pero solo necesito un poco más de ayuda. Ya que está emitiendo los mismos documentos una y otra vez, ¿cómo puedo obtener solo cada documento una vez? – Apreche
No puede, a menos que divida cada una de estas agrupaciones en su propia vista. Por ejemplo,/_design/articles/_view/byRanking,/_design/articles/_view/byDate, etc. Si desea mantener todo en esta vista, deberá gestionar los datos en su cliente. O podría seguir lo que estaba diciendo solo devolviendo el valor _id o null del documento, ya que podría hacer una segunda llamada para obtener el documento una vez. –
Oh espera, no importa. Me lo imaginé. Creo que entendiste mal lo que quería. Quiero ordenar por clasificación, fecha y título simultáneamente. En SQL sería "ordenar por clasificación asc, fecha desc, título asc". Puedo hacer esto haciendo solo una emisión y usar la tecla de inicio y la tecla de fin para filtrar, y el orden ya estará hecho. ¡Gracias! – Apreche