回答:
Mongoose は、メソッドを持つModel
から継承します。あなたが探しているのはの結果だと思います。Document
toObject()
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))