2012-12-10 14 views
10

Ich schreibe eine kleine Anwendung, die Keywords bewertet. Wenn also "Beirut" und "Bildung" eingegeben werden, wenn sie vorher nicht gesehen wurden, möchte ich einen Mongo-Eintrag erstellen und ihnen eine Punktzahl von 1 geben. Wenn sie das haben, möchte ich ihre Punktzahl um eins erhöhen . Ich versuche, dies mit einem Update-Befehl zu tun, aber ich denke, ich könnte es falsch machen.Node.js MongoDB Upsert Update

  • Ranking ist das Objekt, das die Datenbank
  • "Schlüssel" ist das Schlüsselwort
rankingdb.update(
    {keyword:key}, 
    {keyword:key, {$inc:{score:1}}}, 
    {upsert:true, safe:false}, 
    function(err, data) { 
     if (err) { 
      console.log(err); 
     } 
     else { 
      console.log("score succeeded"); 
     } 
    } 
); 

SyntaxError: Unexpected token {

Können Sie nicht ein ganz neues Dokument mit einem Zuwachs erstellen?

Antwort

18

Ihr allgemeiner Ansatz ist richtig, aber wie die Fehlermeldung zeigt, haben Sie ein Syntaxproblem in Ihrem Code.

Versuchen Sie stattdessen:

rankingdb.update(
    {keyword: key}, 
    {$inc: {score: 1}}, 
    {upsert: true, safe: false}, 
    function(err,data){ 
     if (err){ 
      console.log(err); 
     }else{ 
      console.log("score succeded"); 
     } 
    } 
); 

Wenn ein Upsert ein neues Objekt erstellen muss sie die Felder aus dem Selektor (erster Parameter) und das Aktualisierungsobjekt (zweiter Parameter) bei der Erstellung des Objekts, so dass Sie don kombiniert Sie müssen das Feld keyword nicht in beide Felder einschließen.

Beachten Sie, dass update() im 2.0-Treiber veraltet ist. Verwenden Sie jetzt entweder updateOne() oder updateMany().

+0

WUNDERBAR! arbeitete wie ein Saibling. Das ist praktisch! – mradfo21