Tobi, You probably can somehow cram all that stuff together via the reduce function, but you miss out on being able to use the built in _count reduction and it'll take a mess of code.
I think you're better off trying to retrieve this information in two queries: first query for the names and IDs of the polls and then do a second query for the count of choices of those poll IDs. Cheers, Zach 2012/1/6 Tobi Schäfer <[email protected]>: > Hello > > I am developing a little survey / poll tool as a first step in practicing > CouchDB. > > There are poll and vote documents stored in the database: > > poll = { > _id: 'd193f1137ddb65aa14100a51dc61b17e', > type: 'poll', > title: 'What is the question?', > choices: ['Choice 1', 'Choice 2, 'Choice 3'], > date: new Date > } > > vote = { > poll_id: 'd193f1137ddb65aa14100a51dc61b17e', > type: 'vote', > choice: 'Choice 1', > date: new Date > } > > Now I am trying to create a view of all polls together with their aggregated > votes for each choice as well as the total votes: > > map: function(doc) { > if (doc.type === 'poll') { > emit([doc._id, doc.date], {title: doc.title}); > } else if (doc.type === 'vote' && doc.choice) { > emit([doc.poll_id, doc.choice], {count: 1, title: doc.choice}); > emit([doc.poll_id, '_total'], {count: 1, title: doc.choice}); > } > }, > > reduce: function(key, values) { > var i, value, result = {count: 0}; > for (i in values) { > value = values[i]; > result.title = value.title; > if (value.count) { > result.count += 1; > } else { > delete result.count; > } > } > return result; > } > > This seems to work but I am not sure if I will run into “rereduce trouble”: > > ["d193f1137ddb65aa14100a51dc235509", "2012-01-05T15:36:40.632Z"] > {title: "What is the amazingly accurate answer to the ultimate question of > life, the universe and everything?"} > ["d193f1137ddb65aa14100a51dc235509", "_total"] {count: 7, title: "6 > · 9"} > ["d193f1137ddb65aa14100a51dc235509", "101010"] {count: 2, title: "101010"} > ["d193f1137ddb65aa14100a51dc235509", "42"] {count: 3, > title: "42"} > ["d193f1137ddb65aa14100a51dc235509", "6 · 9"] {count: 1, title: "6 > · 9"} > ["d193f1137ddb65aa14100a51dc235509", "XLII"] {count: 1, title: > "XLII"} > > What do you think? Is there an easier or more convenient way to create such a > view? > > Best regards, > Tobi Schäfer >
