Ich habe Dokumente ähnlich wie dies in CouchDB 1.6.1:CouchDB Ansichten (Karte/verkleinern)
"_id": "test_test",
"_rev": "4-8eb22214f7f3dccd3c979f95ded0a7b0",
"test": {
"sample": {
"abc": {
"aaa": 877,
"bbb": 202,
"ccc": 0,
"ddd": 362,
"eee": 242,
"ggg": 81
},
"def": {
"aaa": 697,
"bbb": 233,
"ccc": 0,
"ddd": 178,
"eee": 90,
"ggg": 5
},
"ghi": {
"aaa": 987,
"bbb": 396,
"ccc": 0,
"ddd": 399,
"eee": 178,
"ggg": 108
},
"jkl": {
"aaa": 1165,
"bbb": 332,
"ccc": 0,
"ddd": 286,
"eee": 173,
"ggg": 100
},
Ich möchte Daten von diesem wie extrahieren:
1)
"test": {
"sample": {
"abc": {
"aaa": 877,
"def": {
"aaa": 697,
"ghi": {
"aaa": 987, etc.
oder:
Ich möchte auch in der Lage sein, Summen für alle Dokumente mit 'test'
oder alle Dokumente mit 'sample'
oder alle zu bekommen die Dokumente mit 'def'
oder alle Dokumente mit 'aaa'
.
Ich habe eine Karte Javascript wie folgt:
function(doc) {
if(doc.test.sample.abc.aaa){
emit(null, doc.test.sample.abc.aaa);
}
}
Das gibt richtig einen einzelnen Wert (877)
ich auch
function(doc) {
for (var i in doc.test.sample.abc){
emit(doc.test.sample.abc[i], null);
}
}
versucht haben, der Hoffnung zu bekommen:
"aaa": 877,
"bbb": 202,
"ccc": 0,
"ddd": 362,
"eee": 242,
"ggg": 81
Som ettimes gelingt man mit map/reduce und manchmal klappt nichts.
Schleifen durch Felder scheint schwierig zu sein.
Jede Hilfe wird geschätzt.
bearbeiten:
Beispielcode aus der "Change Notifications, Filter" Abschnitt CouchDB The Definitive Guide
{
"_id": "_design/app",
"_rev": "1-b20db05077a51944afd11dcb3a6f18f1",
"filters": {
"important": "function(doc, req) { if(doc.priority == 'high') { return true; }
else { return false; }}"
}
}
Wenn ich diesen Code in CouchDB fügen Sie ihn zurückgewiesen. Es schlägt auch den JSONLint-Test fehl. Ich habe versucht, es mit den gleichen Ergebnissen zu minimieren. Was sehe ich hier nicht? Code in "Antwort 2" unter PASSIERT den JSONLint-Test und CouchDB akzeptiert es. Sobald jedoch beginnt, bestimmte Funktionen einzugeben, gehen die Dinge schief. Gibt es einen Weg damit umzugehen? Vielen Dank noch einmal.
EDIT2:
Ich bin da fast ??
Dieser Code von Couch akzeptiert wird:
{
"_id": "_design/lists",
"_rev": "3-628dc2f53051971994043c2e0bfc44ea",
"language": "javascript",
"views": {
"list_setup": {
"map": "function(doc) {if(doc.compartment.number){ emit(null, doc.compartment.number);}}"
}
},
"lists": {
"first_list": "function(head, req) {var result = []; while (row = getRow()) { if (row !== null) { row.key + row.value else{ send(JSON.stringify({status_code: 404}));}}send(JSON.stringify(result));}}"
}
}
Allerdings, wenn ich curl laufen, bekomme ich
{"error":"compilation_error","reason":"Expression does not eval to a function. (function(head, req) {var result = []; while (row = getRow()) { if (row !== null) { row.key + row.value else{ send(JSON.stringify({status_code: 404}));}}send(JSON.stringify(result));}})"}
Ich bin nicht sicher, was mit dem row.key + row.value
Teil der Funktion zu tun.
Entschuldigung das hat so lange gedauert.
Können Sie mir die Frage klären? Sie benötigen Hilfe für Ihre Mapping-Funktion auf den test.sample.abc-Childs? –
Alexis Côté Ich brauche Hilfe zum Beispiel mit der Option 1) oben. – jlb333333