qui è ciò che devi fare.
funzione Map
function(doc)
{
if (doc.category)
{
emit(['category', doc.category], doc.modified);
}
}
allora avete bisogno di una funzione lista che li raggruppa, si potrebbe essere temped di abusare di un ridurre e fare questo, ma probabilmente gettare errori a causa di non ridurre abbastanza veloce con grandi insiemi di dati.
function(head, req)
{
% this sort function assumes that modifed is a number
% and it sorts in descending order
function sortCategory(a,b) { b.value - a.value; }
var categories = {};
var category;
var id;
var row;
while (row = getRow())
{
if (!categories[row.key[0]])
{
categories[row.key[0]] = [];
}
categories[row.key[0]].push(row);
}
for (var cat in categories)
{
categories[cat].sort(sortCategory);
categories[cat] = categories[cat].slice(0,10);
}
send(toJSON(categories));
}
è possibile ottenere tutte le categorie Top 10 ora con
http://localhost:5984/database/_design/doc/_list/top_ten/by_categories
e ottenere la documentazione con
http://localhost:5984/database/_design/doc/_list/top_ten/by_categories?include_docs=true
ora è possibile interrogare questo con un POST gamma multipla e limite di quali categorie
curl -X POST http://localhost:5984/database/_design/doc/_list/top_ten/by_categories -d '{"keys":[["category1"],["category2",["category3"]]}'
non è inoltre possibile codificare il codice 10
e passare il numero tramite la variabile req
.
Ecco un'altra vista/elenco trickery.
fonte
2010-04-20 04:35:19
C'è un motivo per cui non vuoi farlo manualmente? Prima query per le categorie disponibili, quindi interrogare gli elenchi per categoria. Effettuando la seconda query in batch, è quasi come su query. –
Posso farlo sì - ma la mia domanda è se qualcosa del genere sia Possibile in couchdb, in una query. Ad esempio, si può farlo in sql con un'istruzione select nidificata complessa e complessa. – drozzy