Mongooseでフィールド検索
Mongooseは、Node.jsのMongoDBドライバです。特定のフィールドを検索するには、find()
メソッドの第二引数に投影オブジェクトを渡します。
投影オブジェクトは、キーと値のペアで構成されます。キーは検索したいフィールド名、値は1または0です。
- 0
指定したフィールドを結果から除外する。
例
const mongoose = require('mongoose');
// モデルの定義
const userSchema = new mongoose.Schema({
name: String,
age: Number,
email: String
});
const User = mongoose.model('User', userSchema);
// 特定のフィールドを検索
User.find({}, { name: 1, age: 1, _id: 0 })
.then(users => {
console.log(users); // _idを除くnameとageのみが表示される
})
.catch(err => {
console.error(err);
});
この例では、_id
を除くname
とage
フィールドのみを検索結果に含めています。
ポイント
_id
フィールドはデフォルトで含まれますが、_id: 0
と設定することで除外できます。- 投影オブジェクトは、検索結果の構造を制御します。
find()
メソッドの第一引数は検索条件です。空のオブジェクト{}
はすべてのドキュメントを検索します。
Mongooseで特定のフィールドをfindする例
例1: 基本的なフィールド検索
const mongoose = require('mongoose');
// モデルの定義
const userSchema = new mongoose.Schema({
name: String,
age: Number,
email: String
});
const User = mongoose.model('User', userSchema);
// 特定のフィールドを検索
User.find({}, { name: 1, age: 1, _id: 0 })
.then(users => {
console.log(users); // _idを除くnameとageのみが表示される
})
.catch(err => {
console.error(err);
});
- 説明
find()
メソッドですべてのユーザーを検索します。- 第二引数の投影オブジェクトで、
name
とage
フィールドを結果に含め、_id
フィールドを除外します。 - 検索結果をコンソールに出力します。
例2: 条件付きフィールド検索
User.find({ age: { $gte: 30 } }, { name: 1, email: 1 })
.then(users => {
console.log(users); // 年齢が30以上のユーザーのnameとemailを表示
})
.catch(err => {
console.error(err);
});
- 説明
find()
メソッドの第一引数で、年齢が30以上のユーザーを検索します。- 第二引数の投影オブジェクトで、
name
とemail
フィールドを結果に含めます。
例3: プロジェクションのネスト
const userSchema = new mongoose.Schema({
address: {
city: String,
country: String
}
});
User.find({}, { 'address.city': 1 })
.then(users => {
console.log(users); // 各ユーザーのaddress.cityのみを表示
})
.catch(err => {
console.error(err);
});
- 説明
- ネストされたフィールドを指定するには、ドット表記を使用します。
- この例では、各ユーザーの
address.city
フィールドのみを表示します。
- 条件付き検索を行う場合は、
find()
メソッドの第一引数に検索条件を指定します。
Mongooseで特定のフィールドを検索する代替方法
Mongooseでは、特定のフィールドを検索する際に、find()
メソッドの第二引数に投影オブジェクトを渡す方法が一般的です。しかし、他にもいくつかの代替方法があります。
select()メソッド
find()
メソッドのチェーンメソッドとしてselect()
メソッドを使用することもできます。
User.find()
.select('name age')
.then(users => {
console.log(users);
})
.catch(err => {
console.error(err);
});
lean()メソッド
lean()
メソッドを使用すると、検索結果をプレーンなJavaScriptオブジェクトとして返します。これにより、Mongooseのドキュメントオブジェクトのオーバーヘッドを回避できます。
User.find()
.lean()
.select('name age')
.then(users => {
console.log(users);
})
.catch(err => {
console.error(err);
});
findOne()メソッド
単一のドキュメントを検索する場合は、findOne()
メソッドを使用できます。
User.findOne()
.select('name age')
.then(user => {
console.log(user);
})
.catch(err => {
console.error(err);
});
aggregate()メソッド
より複雑な検索やデータ処理が必要な場合は、aggregate()
メソッドを使用できます。
User.aggregate([
{ $project: { name: 1, age: 1, _id: 0 } }
])
.then(users => {
console.log(users);
})
.catch(err => {
console.error(err);
});
選択基準
- 機能
aggregate()
メソッドはより複雑な検索やデータ処理が可能ですが、学習コストが高くなります。 - パフォーマンス
lean()
メソッドはMongooseのドキュメントオブジェクトのオーバーヘッドを回避するため、パフォーマンスが向上する場合があります。 - シンプルさ
find()
メソッドとselect()
メソッドは最もシンプルです。
javascript node.js mongodb