Skip to content

Instantly share code, notes, and snippets.

@tobinski
Created April 5, 2013 10:01
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tobinski/5318123 to your computer and use it in GitHub Desktop.
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

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

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