2017-11-29 4 views
0

Ich habe MongoDB als Backing Store für meine App. Haben sie eine Update-Methode gibt, wie unten:MongoDB speichert keine Änderungen

updateEmployee(root, args) { 
    return models.Employee.findById(args.input.id) 
    .then(employee => { 
     employee = Object.assign(employee, args.input) 
     employee.save() 
    }) 
    .then(response => response) 
}, 

Die findById funktioniert gut, aber save() tut nichts - Daten in der Datenbank nicht geändert und ich null als Antwort.

+0

was ist der tatsächliche Zusammenhang? Mungo? Es könnte sein: 'insert()' –

+1

Sie möchten das Versprechen aus Ihrem 'save' Aufruf zurückgeben:' employee.save(); 'zurückgeben. Auf diese Weise arbeitet Ihr zweiter 'then' Aufruf an _that_ promise anstelle des ursprünglichen 'findById'. Probieren Sie es aus. – JohnnyHK

Antwort

1

Das liegt daran, dass das erste Argument, das von Mongoose (und Knoten im Allgemeinen) zurückgegeben wird, nicht Ihre Daten sind, sondern der Fehler (falls vorhanden).

Also nein, es funktioniert nicht gut :) Wenn Sie console.log(employee) mit Ihrem aktuellen Code, wird es protokollieren undefined, weil der Vorgang erfolgreich abgeschlossen, so dass es keinen Fehler gibt.

Sie .then((error, employee) => { console.log(employee) }

schreiben sollten Dies ist Entwickler zu ermutigen, Fehler zu verwalten.

EDIT: Entschuldigung, ich verwechselte then und exec. Versuchen Sie, die exec Ansatz:

.exec((error, employee) => { console.log(employee) }

+0

Das ist nicht richtig. ['then'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then) benötigt zwei Callback-Parameter, einen für die Auflösung und einen für die Zurückweisung (optional). Der Auflösungsrückruf empfängt nur das erfolgreiche Ergebnis der Abfrage, nicht den Fehler. 'exec' macht was du sagst, aber nicht' then'. – JohnnyHK

+0

Oh, das stimmt, ich habe 'then' und' exec' gemischt. Das wurde behoben, danke! –

Verwandte Themen