2017-12-28 29 views
0

Ich entwickle eine Express-API mit Mongos DB und Mungo.es6 Spread-Operator - Mungo Ergebnis Kopie

Ich möchte ein Objekt in Javascript es6 erstellen, bestehend aus wenigen Variablen und das Ergebnis einer Mungo Anfrage und so mit es6 Ausbreitung Betreiber zu tun:

MyModel.findOne({_id: id}, (error, result) => { 
    if (!error) { 
     const newObject = {...result, toto: "toto"}; 
    } 
}); 

Das Problem besteht darin, dass eine Ausbreitung Betreiber Anwendung zu Ergebnis es in einer sonderbaren Art und Weise transformiert:

newObject: { 
    $__: { 
     $options: true, 
     activePaths: {...}, 
     emitter: {...}, 
     getters: {...}, 
     ... 
     _id: "edh5684dezd..." 
    } 
    $init: true, 
    isNew: false, 
    toto: "toto", 
    _doc: { 
     _id: "edh5684dezd...", 
     oneFieldOfMyModel: "tata", 
     anotherFieldOfMyModel: 42, 
     ... 
    } 
} 

ich verstehe Art, dass das Objekt Ergebnis durch Mungo angereichert spezifische Wechselwirkungen mit ihm zu erlauben, aber wenn ich vor so console.log tun Es zeigt ein einfaches Objekt ohne all diese Dinge.

Ich möchte nicht durch ... ergebnis._doc schummeln, weil ich diesen Teil abstrahiere und es wird nicht so passen. Vielleicht gibt es eine Möglichkeit, ein Objekt ohne ererbte Sachen zu kopieren.

Vielen Dank für Ihre Zeit.

+0

Schauen Sie sich die 'toString' Methode an. Thats, was Sie in console.log sehen –

+0

Doing ein 'toString' auf das Ergebnis gibt das einfache Objekt mit nur meine Felder, so scheint es wie das Objekt ist normal, aber es ist, wenn ich Spread-Operator zu versuchen, dass es die Objektstruktur ändert. Dasselbe gilt für 'Object.assign()'. –

+0

Ja dann tu 'console.log (result.toString)' um einen Blick darauf zu werfen, wie es funktioniert ... –

Antwort

1

Sie können die Mungo-Methode Document.toObject() verwenden. Es wird das zugrundeliegende einfache JavaScript-Objekt zurückgeben, das von der Datenbank abgerufen wurde.

const newObject = {...result.toObject(), toto: "toto"}; 

Sie können mehr über die .toObject() Methode here lesen.

+1

Ok, einfach so, das war genau das was ich gesucht habe aber nicht gefunden :) Danke, hoffe es wird mehr Menschen helfen. –