回答:
Mongoose は、メソッドを持つModelから継承します。あなたが探しているのはの結果だと思います。DocumenttoObject()doc.toObject()
http://mongoosejs.com/docs/api.html#document_Document-toObject
Model.find({})ドキュメントで配列を返す場合、これは機能しますか?docs.toObjectを使用できますか?
var docArray = modelArray.map(function(model) { return model.toObject(); });
これを行う別の方法lean()は、クエリチェーンで使用することにより、返されるドキュメントのプレーンなJavaScriptバージョンのみが必要であることをMongooseに伝えることです。そうすることで、Mongooseは完全なモデルインスタンスを作成するステップをスキップし、直接doc変更できるようになります。
MyModel.findOne().lean().exec(function(err, doc) {
doc.addedProperty = 'foobar';
res.json(doc);
});
leanと、最初に完全なMongooseドキュメントを作成するオーバーヘッドをスキップできるため、一般的にパフォーマンスが向上します。
lean()クエリをチェーンすると、クエリが実際に(によってexec)実行される前にオプションが設定されるため、結果は直接「リーン」形式になります。呼び出しによるパフォーマンスへのプラスの影響については、この質問を参照してくださいlean。
プロパティがモデルにない場合の高速な方法:
document.set( key,value, { strict: false });
このような問題に取り組むより良い方法は、このdoc.toObject()ように使用することです
doc.toObject({ getters: true })
他のオプションは次のとおりです。
getters: すべてのゲッター(パスおよび仮想ゲッター)を適用するvirtuals: 仮想ゲッターを適用します(ゲッターオプションをオーバーライドできます)minimize: 空のオブジェクトを削除する(デフォルトはtrue)transform: 返される前に結果のドキュメントに適用する変換関数depopulate: 移入されたパスを元に戻し、それらを元の参照に置き換えます(デフォルトはfalse)versionKey: バージョンキーを含めるかどうか(デフォルトはtrue)だから例えばあなたは言うことができます
Model.findOne().exec((err, doc) => {
if (!err) {
doc.toObject({ getters: true })
console.log('doc _id:', doc._id)
}
})
そして今それは動作します。
参照については、http://mongoosejs.com/docs/api.html#document_Document-toObjectを参照してください。
Mongooseドキュメントからプレーンオブジェクトを取得するには_doc、次のようにプロパティを使用しました
mongooseDoc._doc //returns plain json object
私は試しましたtoObjectが、それは私に必要のない関数、引数、および他のすべてのものを与えました。
_最初からプロパティまたはメソッドにアクセスする ことは、理想的なソリューションではありません。リーンを使用すると、ケースが解決する場合があります。
_doc何の問題もなく何回も財産を使いました。また、leanメソッドを使用すると、マングースモデルの操作を実行できないプレーンオブジェクトが得られます。
オブジェクトを文字列化し、再度解析して通常のオブジェクトを作成することもできます。たとえば、次のようになります。
const obj = JSON.parse(JSON.stringify(mongoObj))