(Node.js)MongoDB:DocumentをJavaScriptオブジェクトに変換する
![]
APIを迅速かつ簡単に開発する際には、
mongoseを使用してデータをクエリーし、json形式に変換してすぐに応答を送信する場合は問題ありませんが、データを拡散演算子やユニットテストに分解すると、望ましくないデータが含まれていることがよくあります.
Mongoose Queryで検索したデータは簡単なPlain Old JavaScriptオブジェクト(POJO)ではなく、Mongoose Document形式なので.
Mongoose Documentには、次の内容が含まれています. Changing tracking Casting and validation Getters and Setters Virtual save() 追加の情報とメソッドが含まれているので、Query結果値を使用して変更し、
他の情報やメソッドを使用しない場合は、Mongoose Documentを使用する必要はありません.したがって、一般的に
これよりも効果的な方法があります.それは
Express応答のように、何の変更もなしにQuery結果を直接送信: Query結果を変更せずにカスタムgetterを使用しない場合、 Faster Mongoose Queries With Lean
APIを迅速かつ簡単に開発する際には、
Node.js + Express.js + mongoDB
の組合せがよく用いられる.また、MongoDB ODM(オブジェクトドキュメントマッピング)mongoose
を使用してデータベースを管理します.mongoseを使用してデータをクエリーし、json形式に変換してすぐに応答を送信する場合は問題ありませんが、データを拡散演算子やユニットテストに分解すると、望ましくないデータが含まれていることがよくあります.
予想どおりの様子
{
"name": "hodoopapa",
"position": "개발자",
"roles": [
"ADMIN"
]
}
じつそう
{
"$__": {
"$options": {
"defaults": true
},
"$setCalled": {},
// ... (생략)
"backup": {
"activePaths": {
"default": {
"_id": true
},
"modify": {
"name": true,
"position": true,
"roles": true
}
}
},
"cachedRequired": {},
// ... (생략)
"getters": {},
"inserting": true,
"pathsToScopes": {
"roles": "[Circular reference found] Truncated by IDE"
},
"session": null,
"strictMode": true,
"validating": null,
"wasPopulated": false
},
"$locals": {},
"$op": null,
"_doc": {
"__v": 0,
"_id": "[Circular reference found] Truncated by IDE",
"name": "hodoopapa",
"position": "개발자",
"roles": [
"ADMIN"
]
},
"isNew": false
}
Mongoose Document
Mongoose Queryで検索したデータは簡単なPlain Old JavaScriptオブジェクト(POJO)ではなく、Mongoose Document形式なので.
Mongoose Documentには、次の内容が含まれています.
save()
メソッドで変更内容をDBに反映することができます.const findAndUpdateName = async (oldName, newName) => {
const user = await User.findOne({ name: oldName });
user.name = newName;
const savedUser = await user.save();
return savedUser;
Plain Old JavaScript Object(POJO)
他の情報やメソッドを使用しない場合は、Mongoose Documentを使用する必要はありません.したがって、一般的に
toObject()
の方法でPOJOに変換して使用される.これよりも効果的な方法があります.それは
lean()
方法です.toObject()
メソッドを使用する場合は、Query結果をMongoose Documentに変換してからPOJOに変換しますが、lean()
メソッドを使用する場合は、中間プロセスを必要とせずにPOJOに戻ります.toObject()メソッドの使用
const findbyName = async (name) => {
const user = await User.findOne({ name });
return user.toObject();
};
lean()メソッドの使用
const findByName = async (name) => {
const user = await User.findOne({ name }).lean();
return user;
};
lean()メソッドの使用
lean()
個のメッセージを用いて得られたデータはMongoose Documentではないため,付加情報やsave()などの方法は利用できない.そのため、以下の場合に使用することをお勧めします.リファレンス
Reference
この問題について((Node.js)MongoDB:DocumentをJavaScriptオブジェクトに変換する), 我々は、より多くの情報をここで見つけました https://velog.io/@yunsungyang-omc/Node.js-MongoDB-Document를-JavaScript-Object로-변환하기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol