2017-08-14 6 views
0

Ich habe eine kleine Funktion geschrieben, um Ergebnisse basierend auf zwei Suchbegriffen zu erhalten, die ein Benutzer machen kann. Die Begriffe sind: owner & path eines Ordners.Probleme beim Abrufen eines separaten Dokuments in Map-Funktion

Die Kartenfunktion unten funktioniert so weit, dass es mir den richtigen Ordner zurückgibt, wenn ein Benutzer nach bob & holiday sucht. Leider funktioniert der elfe if Teil nicht, wo ich das Dateidokument abrufen möchte. Wenn ich beide getrennt if s alles funktioniert. Warum nicht in Kombination? :-)

Map-Funktion:

function(doc) { 
    if (doc.type == 'folder') { 
     emit([doc.owner, doc.path], null); 
    } else if (doc.files) {  
    for (var i in doc.files) { 
      emit(doc.owner, {_id: doc.files[i]}); 
     } 
    } 
} 

Dokumente:

// Folder 
{ 
    "_id": "folder.abc", 
    "name": "Holiday", 
    "type": "folder", 
    "owner": "bob", 
    "path": "\\holiday", 
    "files": [ 
    "file.123" 
    ] 
} 

// Files 
{ 
    "_id": "file.123", 
    "name": "Hawaii.jpg", 
    "type": "file", 
} 

Suchanfrage:

[Snip]?key=["bob","\\holiday"]&include_docs=true

Ergebnis:

{ 
    "total_rows":4, 
    "offset":2, 
    "rows":[ 
     { 
      "id":"folder.abc", 
      "key":[ 
       "bob", 
       "\\holiday" 
      ], 
      "value":null, 
      "doc":{ 
       "_id":"folder.abc", 
       "name":"Holiday", 
       "type":"folder", 
       "owner":"bob", 
       "path":"\\holiday", 
       "files":[ 
        "file.123" 
       ] 
      } 
     } 
    ] 
} 

Antwort

0

Leider ist das elfe, wenn ein Teil nicht funktioniert, wo ich die Dateien Dokument abrufen möchten. Wenn ich beide getrennt habe, funktioniert alles. Warum nicht in Kombination? :-)

Dies funktioniert nicht, da JavaScript kein elseif Schlüsselwort hat. Mit else if entspricht:

if (doc.type === 'folder') { 
    ... 
} else { 
    if (doc.files) { 
     ... 
    } 
} 

siehe: MDN if...else

Verwandte Themen