2017-11-17 5 views
0

Ich füge Daten mit generierten IDs hinzu, versuche aber, "Autoren" zu gruppieren.Firebase: Vor dem Hinzufügen auf Vorhandensein prüfen

Ich habe ein Skript, das jeden Tag basierend auf ein paar Formeln bestimmte Leute hinzufügt. Es gibt keine Möglichkeit für mich zu wissen, wer an einem bestimmten Tag hinzugefügt wird, also bin ich gezwungen, die Datenbank zu strukturieren, indem ich die Schlüssel bei der Übergabe erzeuge (push) und dann den Autorschlüssel finde und andere Schlüssel mit dem gleichen Wert finde.

Das Problem, das ich habe, überprüft, ob ein Wert vorhanden ist, bevor ein neuer Datensatz hinzugefügt wird. Einer der Schlüsselwerte ist "URL". Ich habe versucht, etwas zu schreiben, um jeden Datensatz auf diesen Wert zu überprüfen, aber es scheint sich zu wiederholen und in die Datenbank zu schreiben, ungeachtet dessen, was der Wert ist, obwohl ich das Duplikat richtig erkennen kann.

function CheckDupes(newUrl, author, title, score, url, certified, date){ 
    var stories = []; 
    var duped = "false"; 

    var leadsRef = database.ref().child("Authors").once("value").then(function(authorSnapshot) 
    { 
    authorSnapshot.forEach(function(child) { 
     stories.push(child.val()); 
     }); 
    for(var i = 0; i < stories.length; i++) 
    { 
     console.log("Story: " + stories[i].url); 
     if(stories[i].url == newUrl) 
     { 
     console.log("Duplicate - " + stories[i].url); 
     duped = "true"; 
     alert("Story Exists!"); 
     break; 
     } 
    } 
    }); 

    console.log(duped); 
    if(duped == "false") 
    { 
    firebase.database().ref('Authors/').push({ 
     author: author, 
     title: title, 
     score: score, 
     url: url, 
     certified: certified, 
     date: date 
    }); 
    alert("Story has been added!"); 
    } 

Dies ist, was ich derzeit habe. Es findet das Duplikat, fügt es aber zur Datenbank hinzu, unabhängig davon, ob es eines findet oder nicht. Ich habe den Check außerhalb der foreach-Schleife verschoben, aber dann speichert er überhaupt nichts.

Antwort

0
function CheckDupes(newUrl, author, title, score, url, certified, date){ 
    var stories = []; 
    var duped = "false"; 
    var leadsRef = database.ref().child("Authors").once("value").then(function(authorSnapshot) 
    { 
    authorSnapshot.forEach(function(child) { 
     stories.push(child.val()); 
     count++; 
     }); 
     for(var i = 0; i < stories.length; i++) 
     { 
     if(stories[i].url == newUrl) 
     { 
      duped = "true"; 
      alert("Story Exists!"); 
      return; 
      break; 
     } 
     } 
     if(duped == "false") 
     { 
     firebase.database().ref('Authors/').push({ 
      author: author, 
      title: title, 
      score: score, 
      url: url, 
      certified: certified, 
      date: date 
     }); 
     alert("Story has been added!"); 
     } 
    }); 

Benötigt alles innerhalb der AuthorSnapshot-Funktion. Dummer Fehler.

Verwandte Themen