2016-10-22 9 views
1

Mein Rest api ruft Put-Anfrage an diese Funktion, um Firebase-Token auf Postgre-sql zu erstellen.
Ich merke jedoch, wann immer das Token aktualisiert wird eine neue Zeile für den gleichen Benutzer hinzugefügt wird.
Wie mache ich es so, dass es eine Einfügung durchführt, wenn es existiert, und wenn es nicht aktualisiert wird.
Ich habe bereits versucht, auf Konfliktaktualisierung, aber es funktioniert nicht.Auf Knoten, wie Sie eine Einfügung durchführen, wenn nicht existiert

Der Code ist hier:

function createUserToken(req, res, next) { 
    var userid = req.user.email; 
    db.none('insert into fcmdb(userid, token)'+ 
    'values($1, $2) on conflict update', 
    [userid,req.body.token]) 
    .then(function() { 
     res.status(200) 
     .json({ 
      status: 'success', 
      message: 'Inserted token' 
     }); 
    }) 
    .catch(function (err) { 
     return next(err); 
    }); 
} 
+0

Mögliches Duplikat von [Wie UPSTERT (MERGE, INSERT ... ON DUPLICATE UPDATE) in PostgreSQL?] (Http://stackoverflow.com/questions/17267417/how-to-upsert-merge-insert-on- duplicate-update-in-postgresql) –

Antwort

1

Dies ist nur, weil direkt mit Hilfe der Insert-Abfrage der Daten einfügen. Was Sie getan haben sollte, ist zunächst müssen Sie mit Hilfe von userId zu überprüfen, was die Benutzer-ID hat in Ihrem db existiert es ja, dann müssen Sie das sonst aktualisieren gerade ist einfügen, wie Sie

Oder

tun

Sie können dieses Beispiel als Referenz verwenden (verwenden Sie DUPLICATE KEY UPDATE anstelle von Konflikt Update) INSERT INTO Tabelle (a, b, c) Werte (1,2,3) ON DUPLICATE KEY UPDATE c = c + 1;

+1

Danke, es geschafft, damit es funktioniert mit Einfügen in fcmdb (Benutzer-ID, Token) Werte ('[email protected] ',' Hallo ') ON CONFLICT (Benutzer-ID) UPDATE setzen Token =' HALLO';. Auch ich habe vergessen, Benutzer-ID als Primärschlüssel festzulegen und das hat es behoben. –

Verwandte Themen