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); | |
} | |
} | |
} | |
} | |
} | |
} | |
} | |
} |
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);
})
})
})
}
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);
}
}
})
})
})
}
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);
})
})
})
}