2017-12-28 33 views
0

私はmongo DBとmongooseでexpress js APIを開発しています。es6スプレッド演算子 - mongoose結果のコピー

私はいくつかの変数で構成JavascriptのES6におけるオブジェクトとマングース要求の結果を作成し、ES6スプレッド演算子でそうしたいしたいと思います:

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

問題は、拡散演算子を適用します私は一種の私がそうする前にconsole.logときにオブジェクト結果は、それとの特異的相互作用を可能にするために、マングースによって濃縮されるがいることを理解

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

結果に奇妙な方法でそれを変換しますそれはすべてのものがない単純なオブジェクトを描いています。

... result._doc私はこの部分を抽象化しており、そのようには適合しないため、私は不正行為をしたくありません。たぶん、エリシートなものを使わずにオブジェクトをコピーする方法があります。

ありがとうございます。

+0

'toString'メソッドを見てください。それはあなたがconsole.logの中に見えることです。 –

+0

結果に 'toString'を実行すると、自分のフィールドだけの単純なオブジェクトが返されるので、オブジェクトが正常であるように見えますが、スプレッド演算子を使用してオブジェクト構造を変更しようとします。 'Object.assign()'とまったく同じです。 –

+0

ええ、うん、それで 'console.log(result.toString)'を見て、どういう風に見えるか... –

答えて

1

あなたはMongoose Document.toObject()メソッドを使用できます。これは、データベースからフェッチされた基本のJavaScriptオブジェクトを返します。

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

あなたは.toObject()方法hereについての詳細を読むことができます。

+1

それは単純に、私が探していたものだが見つけられなかった。より多くの人々を助けるでしょう。 –

関連する問題