Skip to content

Instantly share code, notes, and snippets.

@tobinski
Created April 5, 2013 10:01
Show Gist options
  • Select an option

  • Save tobinski/5318123 to your computer and use it in GitHub Desktop.

Select an option

Save tobinski/5318123 to your computer and use it in GitHub Desktop.
function(doc) {
if(doc.namen.length > 0) {
for(var idx in doc.namen) {
if(doc.namen[idx].ereignisse.length > 0) {
for(var ide in doc.namen[idx].ereignisse){
if(doc.namen[idx].ereignisse[ide].beobachtungen.length > 0){
for(var idb in doc.namen[idx].ereignisse[ide].beobachtungen){
if(doc.namen[idx].ereignisse[ide].beobachtungen[idb].beobachtungsklasse && doc.namen[idx].ereignisse[ide].beobachtungen[idb].ort) {
emit([doc.namen[idx].ereignisse[ide].beobachtungen[idb].beobachtungsklasse,doc.namen[idx].ereignisse[ide].beobachtungen[idb].ort],null);
}
}
}
}
}
}
}
}
@iulica
Copy link
Copy Markdown

iulica commented Apr 5, 2013

Here is a simpler version, though with the same algorithm.

function(doc) {
doc.namen && doc.namen.ForEach(
function(name){
name.ereignisse && name.ereignisse.ForEach(
function(ereignis){
ereignis.beobachtungen && ereignis.beobachtungen.ForEach(
function(beobacht){
beobacht.beobachtungsklasse &&
beobacht.ort &&
emit([beobacht.beobachtungsklasse ,
beobacht.ort], null);
})
})
})
}

@iulica
Copy link
Copy Markdown

iulica commented Apr 5, 2013

if you know the documents are "well" written you can drop the tests:

function(doc) {
doc.namen.ForEach(
function(name){
name.ereignisse.ForEach(
function(ereignis){
ereignis.beobachtungen.ForEach(
function(beobacht){
beobacht.beobachtungsklasse &&
beobacht.ort &&
emit([beobacht.beobachtungsklasse ,
beobacht.ort], null);
})
})
})
}

@iulica
Copy link
Copy Markdown

iulica commented Apr 5, 2013

If you would like distinct documents in the view result you must be sure to emit distinct keys for the same document:
One way to do it is:

function(doc) {
var o = {};
doc.namen.ForEach(
function(name){
name.ereignisse.ForEach(
function(ereignis){
ereignis.beobachtungen.ForEach(
function(beobacht){
if (beobacht.beobachtungsklasse &&
beobacht.ort){
var key = [beobacht.beobachtungsklasse ,
beobacht.ort];
if (!(key in o)){
o[key] = null;
emit(key, null);
}
}
})
})
})
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment