【超便利】Mongooseでコレクションを自在に操作!find、findOne、findById、count、aggregateの使い方を徹底解説
Mongoose を使用して既存のコレクションにアクセスする方法
このチュートリアルでは、Mongoose を使用して既存の MongoDB コレクションにアクセスする方法を説明します。Mongoose は、Node.js 用の MongoDB オブジェクト モデリング ライブラリです。
前提条件
このチュートリアルを始める前に、以下の条件を満たしていることを確認してください。
- Node.js がインストールされている
- MongoDB がインストールおよび実行されている
手順
-
Mongoose に接続する
まず、Mongoose に接続する必要があります。これを行うには、次のコードを使用します。
const mongoose = require('mongoose'); mongoose.connect('mongodb://localhost:27017/test', { useNewUrlParser: true });
このコードは、
test
という名前のデータベースに接続します。データベースが存在しない場合は、作成されます。 -
モデルを定義する
コレクションにアクセスするには、まずそのコレクションに対応するモデルを定義する必要があります。モデルは、コレクション内のドキュメントの構造を定義します。
const userSchema = new mongoose.Schema({ name: String, email: String, password: String }); const User = mongoose.model('User', userSchema);
このコードは、
User
という名前のモデルを定義します。このモデルには、name
、email
、およびpassword
という 3 つのプロパティがあります。 -
コレクションにアクセスする
モデルを定義したら、コレクションにアクセスできます。これを行うには、次のコードを使用します。
User.find({}, (err, users) => { if (err) { console.error(err); return; } console.log(users); });
このコードは、
User
コレクション内のすべてのドキュメントを取得します。ドキュメントはusers
変数に格納されます。 -
特定のドキュメントにアクセスする
特定のドキュメントにアクセスするには、そのドキュメントの ID を使用します。ドキュメントの ID は、
_id
プロパティで取得できます。User.findById('5d234567890abc1234567890', (err, user) => { if (err) { console.error(err); return; } console.log(user); });
このコードは、ID が
5d234567890abc1234567890
のドキュメントを取得します。ドキュメントはuser
変数に格納されます。
このチュートリアルでは、Mongoose を使用して既存の MongoDB コレクションにアクセスする方法を説明しました。Mongoose を使用すると、MongoDB コレクションとやり取りするのが簡単になります。
- エラー処理を適切に行うことが重要です。このチュートリアルでは、簡潔にするためにエラー処理を省略していますが、本番コードでは必ずエラー処理を行うようにしてください。
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/test', { useNewUrlParser: true });
const userSchema = new mongoose.Schema({
name: String,
email: String,
password: String
});
const User = mongoose.model('User', userSchema);
// すべてのドキュメントを取得
User.find({}, (err, users) => {
if (err) {
console.error(err);
return;
}
console.log(users);
});
// ID で特定のドキュメントを取得
User.findById('5d234567890abc1234567890', (err, user) => {
if (err) {
console.error(err);
return;
}
console.log(user);
});
説明
-
すべてのドキュメントを取得
-
ID で特定のドキュメントを取得
実行方法
このコードを実行するには、次の手順を実行します。
-
次のコマンドを使用してコードを実行します。
node index.js
出力
このコードを実行すると、次の出力がコンソールに表示されます。
[ { _id: 5d234567890abc1234567890, name: 'John Doe', email: '[email protected]', password: 'password123' } ]
find()
メソッドは、コレクション内のドキュメントを検索するために使用されます。このメソッドは、さまざまな条件に基づいてドキュメントを検索できます。
// すべてのドキュメントを取得
User.find({}, (err, users) => {
if (err) {
console.error(err);
return;
}
console.log(users);
});
// 名前が "John Doe" のドキュメントを取得
User.find({ name: 'John Doe' }, (err, users) => {
if (err) {
console.error(err);
return;
}
console.log(users);
});
// ID でドキュメントを取得
User.findOne({ _id: '5d234567890abc1234567890' }, (err, user) => {
if (err) {
console.error(err);
return;
}
console.log(user);
});
// 名前が "John Doe" で、メールアドレスが "[email protected]" のドキュメントを取得
User.findOne({ name: 'John Doe', email: '[email protected]' }, (err, user) => {
if (err) {
console.error(err);
return;
}
console.log(user);
});
findById()
メソッドは、ID でドキュメントを取得するために使用されます。これは findOne()
メソッドと似ていますが、ID でドキュメントを検索するだけです。
// ID でドキュメントを取得
User.findById('5d234567890abc1234567890', (err, user) => {
if (err) {
console.error(err);
return;
}
console.log(user);
});
count()
メソッドは、コレクション内のドキュメント数を取得するために使用されます。
// コレクション内のドキュメント数を取得
User.countDocuments({}, (err, count) => {
if (err) {
console.error(err);
return;
}
console.log(count);
});
aggregate() メソッドを使用する
aggregate()
メソッドは、コレクション内のドキュメントを集計するために使用されます。このメソッドは、さまざまな集計パイプラインを使用して、データを分析できます。
// コレクション内のすべてのユーザーの平均年齢を取得
User.aggregate([
{ $group: { _id: null, averageAge: { $avg: '$age' } } }
], (err, result) => {
if (err) {
console.error(err);
return;
}
console.log(result[0].averageAge);
});
mongodb node.js express