Vista de Pouchdb que devuelve un resultado vacío
Buenos días, Actualmente estoy trabajando con Couchdb y Pouchdb y tengo un problema con una consulta en el lado de Pouchdb.
Tengo una base de datos con diferentes documentos configurados así:
{
"_id": "fd87b66087503d760fa501fa49029f94",
"_rev": "1-e2be19d447c98d624c2c8492eaf0a3f4",
"type": "product",
"name": "Blanc de Morgex et de la Salle Brut Extreme 2014",
"category": "Wine",
"subcategory": null,
"zone": "Italy",
"nation": "Valle d'Aosta",
"province": "Morgex, AO",
"cellar": "Cave Mont Blanc",
"price": 30,
"structure": null,
"year": 2014,
"mescita": null,
"tag": null
}
La consulta que escribí debería devolver los años disponibles de productos que coinciden con algunos filtros. Esta es la consulta, con reduce : _count
:
function (doc) {
if(doc.category && doc.type == 'product' && doc.year != null) {
emit(doc.year , 1);
}
}
Si lo pruebo con Postman agregando el parámetro group = true
todo funciona y el resultado es algo como:
{
"rows": [
{
"key": 2004,
"value": 2
},
{
"key": 2006,
"value": 2
},
{
"key": 2008,
"value": 2
}
]
}
El problema es cuando ejecuto esta vista con Pouchdb con el siguiente código que devuelve un JSON con una matriz vacía:
wine_db.query('wine_list/years', {reduce: '_count', key : "Bollicine", group : true, group_level: 2}).then(function(doc) {
years_list = doc;
console.log('getting year list');
console.log(doc);
}).catch(function(err){
console.log(err);
});
He intentado jugar un poco con los parámetros de la función e incluso cambiar la función para que devuelva solo una lista de todos los años, pero no. No puedo encontrar el problema ni una solución diferente, así que estoy abierto a cualquier sugerencia que puedas tener.
Otra solución (resultado del grupo)
Trabajando en las indicaciones y en la solución sugerida por @user3405291 finalmente encontré una manera de agrupar los resultados por año.
Dado que la función de emisión devuelve una clave compleja ['CATEGORY', YEAR]
, puedo usar los parámetros startkey y endkey para consultar el resultado solo para una sección del índice devuelto manteniendo de esta manera la función de reducción habilitada para agrupar el resultado.
Al final la función de vista es:
function (doc) {
if(doc.category && doc.type == 'product' && doc.year) {
emit([doc.category, doc.year], doc.year );
}
}
Y la consulta de Pouchdb:
wine_db.query('wine_list/years',
{
startkey : ['CATEGORY'],
endkey : ['CATEGORY', {}],
group: true
}
).then(function (doc) {
years_list = doc;
console.log(years_list);
}).catch(function (err) {
console.log(err);
});
El resultado, donde valor es el número total de elementos con ese índice:
{
"rows": [
{
"key": [
"Bollicine",
2004
],
"value": 2
},
{
"key": [
"Bollicine",
2006
],
"value": 2
},
{
"key": [
"Bollicine",
2008
],
"value": 2
}
]
}
Mostrar la mejor respuesta