Mongoose クエリで特定の日付範囲のデータをスマートに取得!Node.js、MongoDB、Expressで実現
Node.js、MongoDB、Express を使用した特定の日付での MongoDB/Mongoose クエリ
前提条件
このチュートリアルを始める前に、以下の条件を満たしていることを確認してください。
- Node.js がインストールされている
- MongoDB がインストールおよび実行されている
手順
- プロジェクトのセットアップ
npm init -y
npm install express mongoose
- MongoDB への接続
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/yourDatabaseName', { useNewUrlParser: true, useUnifiedTopology: true });
- モデルの作成
const userSchema = new mongoose.Schema({
name: String,
date: Date,
});
const User = mongoose.model('User', userSchema);
- 特定の日付のクエリ
const startDate = new Date('2024-05-22');
const endDate = new Date('2024-05-22');
User.find({ date: { $gte: startDate, $lte: endDate } }, (err, users) => {
if (err) {
console.error(err);
return;
}
console.log(users);
});
このコードは、date
フィールドが startDate
と endDate
の間の値を持つすべてのユーザーを検索します。
- 実行
node index.js
説明
mongoose.connect()
関数は、MongoDB データベースへの接続を確立します。mongoose.Schema()
コンストラクタは、MongoDB コレクションのスキーマを定義します。mongoose.model()
関数は、スキーマに基づいてモデルを作成します。User.find()
メソッドは、MongoDB コレクションからドキュメントを検索します。$gte
演算子は、フィールドの値が指定された値以上であるドキュメントを検索します。
このチュートリアルでは、Node.js、MongoDB、Express を使用して、特定の日付の MongoDB/Mongoose クエリを実行する方法を説明しました。この方法は、特定の日付の範囲内のドキュメントを検索する必要がある場合に役立ちます。
const express = require('express');
const mongoose = require('mongoose');
const app = express();
const port = 3000;
// MongoDB への接続
mongoose.connect('mongodb://localhost:27017/yourDatabaseName', { useNewUrlParser: true, useUnifiedTopology: true });
// モデルの作成
const userSchema = new mongoose.Schema({
name: String,
date: Date,
});
const User = mongoose.model('User', userSchema);
// 特定の日付のクエリ
app.get('/users/:startDate/:endDate', async (req, res) => {
const startDate = new Date(req.params.startDate);
const endDate = new Date(req.params.endDate);
try {
const users = await User.find({ date: { $gte: startDate, $lte: endDate } });
res.json(users);
} catch (err) {
console.error(err);
res.status(500).send('Error');
}
});
// サーバーの起動
app.listen(port, () => {
console.log(`Server listening on port ${port}`);
});
このコードは、以下のことを行います。
express
とmongoose
モジュールをインポートします。app
という Express アプリケーションを作成します。port
変数にポート番号 3000 を割り当てます。userSchema
という Mongoose スキーマを作成します。/users/:startDate/:endDate
というエンドポイントを作成します。app.get()
メソッドを使用して、エンドポイントのハンドラーを定義します。- ハンドラーは、
req.params.startDate
とreq.params.endDate
パラメータを使用して、開始日と終了日を解析します。 - 検索結果を JSON 形式で返します。
- エラーが発生した場合は、エラーメッセージをコンソールに出力し、ステータスコード 500 で応答します。
app.listen()
メソッドを使用して、サーバーをポート 3000 で起動します。
実行方法
このコードを実行するには、以下の手順を実行します。
- コードを保存します。
- ターミナルで、以下のコマンドを実行します。
node index.js
- ブラウザで、以下の URL にアクセスします。
http://localhost:3000/users/2024-05-22/2024-05-22
この URL にアクセスすると、2024 年 5 月 22 日のドキュメントが返されます。
注意事項
- このコードは、サンプルコードであることに注意してください。本番環境で使用するには、適切な変更を加える必要があります。
- エラー処理を改善するなど、コードを強化することをお勧めします。
- コードは、セキュリティ上の脆弱性を防ぐために適切に検証する必要があります。
Node.js、MongoDB、Express を使用した MongoDB/Mongoose クエリの実行方法:代替方法
const startDate = new Date('2024-05-22');
const endDate = new Date('2024-05-22');
const dates = [startDate, endDate];
User.find({ date: { $in: dates } }, (err, users) => {
if (err) {
console.error(err);
return;
}
console.log(users);
});
このコードは、dates
配列内のいずれかの値と一致する date
フィールドを持つすべてのユーザーを検索します。
特定の日付のクエリを実行するには、以下の方法も使用できます。
- [
find()
メソッドと$eq
演算子を使用する
node.js mongodb express