Node.jsアプリケーションのパフォーマンス向上:Mongooseでfindを使って必要なデータだけを取得する
Mongoose で find を使って特定のフィールドを選択する
Mongoose は、Node.js 向けの MongoDB オブジェクトマッピングライブラリです。Mongoose を使用すると、MongoDB コレクションを JavaScript オブジェクトとして操作しやすくなります。
このチュートリアルでは、find
メソッドを使用して特定のフィールドを選択する方法について説明します。
例
次の例では、users
コレクションから name
と email
フィールドのみを含むドキュメントを取得する方法を示します。
const User = require('./user.model');
User.find({}, { name: 1, email: 1 })
.then(users => console.log(users))
.catch(err => console.error(err));
このコードは次のようになります。
User
モデルをインポートします。find
メソッドを呼び出して空のクエリオブジェクトを渡します。これは、すべてのドキュメントを取得することを意味します。- 第二引数として、取得するフィールドを指定するオブジェクトを渡します。この場合、
name
とemail
フィールドのみを取得します。 then
メソッドを使用して、クエリが成功したときの処理を定義します。
フィールドの選択
第二引数として渡すオブジェクトには、取得するフィールドを指定するキーと値のペアが含まれます。キーはフィールド名、値は 1 または 0 にする必要があります。
- 1: フィールドを取得します。
デフォルトでは、すべてのフィールドが取得されます。
その他のオプション
find
メソッドには、フィールドの選択以外にも多くのオプションがあります。詳細については、Mongoose ドキュメントを参照してください。
Mongoose の find
メソッドを使用して、特定のフィールドを選択することは簡単です。これにより、必要なデータのみを取得し、ネットワーク帯域幅とパフォーマンスを節約できます。
const mongoose = require('mongoose');
// データベースに接続
mongoose.connect('mongodb://localhost:27017/test', { useNewUrlParser: true, useUnifiedTopology: true });
// スキーマを定義
const userSchema = new mongoose.Schema({
name: String,
email: String,
age: Number,
});
// モデルを定義
const User = mongoose.model('User', userSchema);
// `name` と `email` フィールドのみを含むドキュメントを取得
User.find({}, { name: 1, email: 1 })
.then(users => console.log(users))
.catch(err => console.error(err));
// `age` フィールドを除いたすべてのフィールドを含むドキュメントを取得
User.find({}, { age: 0 })
.then(users => console.log(users))
.catch(err => console.error(err));
説明
mongoose
モジュールをインポートします。connect
メソッドを使用して、MongoDB データベースに接続します。Schema
クラスを使用して、ドキュメントの構造を定義します。model
メソッドを使用して、スキーマに基づいてモデルを作成します。find
メソッドを使用して、コレクションからドキュメントを取得します。- 第二引数として、取得するフィールドを指定するオブジェクトを渡します。
実行方法
このコードを実行するには、以下の手順を実行する必要があります。
- Node.js をインストールします。
- MongoDB をインストールして実行します。
- 上記のコードを保存して、Node.js で実行します。
出力
以下の出力がコンソールに表示されます。
[ { name: 'John Doe', email: '[email protected]' },
{ name: 'Jane Doe', email: '[email protected]' } ]
[ { name: 'John Doe', email: '[email protected]' },
{ name: 'Jane Doe', email: '[email protected]' } ]
補足
このコードはあくまで一例です。必要に応じて、コードを自由に修正してください。
Mongoose で find を使って特定のフィールドを選択するその他の方法
前述の例では、find
メソッドの第二引数としてオブジェクトを渡して、取得するフィールドを指定しました。これは、プロジェクションオブジェクトと呼ばれるオブジェクトです。
User.find({}, { name: 1, email: 1 })
.then(users => console.log(users))
.catch(err => console.error(err));
select メソッドの使用
find
メソッドの代わりに、select
メソッドを使用して、取得するフィールドを指定することもできます。
User.find({}).select('name email')
.then(users => console.log(users))
.catch(err => console.error(err));
$project 演算子の使用
Mongoose クエリパイプラインを使用して、$project
演算子を使用してフィールドを選択することもできます。
User.find({})
.project({ name: 1, email: 1 })
.then(users => console.log(users))
.catch(err => console.error(err));
フィールド抽出関数の使用
Mongoose には、フィールドを抽出するために使用できるいくつかの関数があります。
_.pick
関数は、オブジェクトから指定されたプロパティのサブセットを抽出します。
User.find({})
.then(users => users.map(_.pick('name', 'email')))
.then(users => console.log(users))
.catch(err => console.error(err));
Mongoose で find
を使って特定のフィールドを選択するには、いくつかの方法があります。
- プロジェクションオブジェクトの使用
javascript node.js mongodb