MongoDBでISODateを使った日付クエリの操作方法|$gte演算子の使い方を解説
MongoDBでISODateを使った日付クエリの基本
MongoDBでISODate()を用いた日付クエリを実行するには、比較演算子の$gteをISODate()と組み合わせるのが一般的な方法です。これにより、「指定した日時以降のデータを取得する」といった条件検索が簡単に行えます。
本記事では、実際にコレクションを作成しながら、日付クエリの具体的な使い方を順番に見ていきましょう。
サンプルコレクションの作成
まずは概念を理解するため、日付フィールドを含むドキュメントを持つコレクションを作成します。以下のクエリでコレクションの作成とドキュメントの挿入が同時にできます。
> db.dateDemo.insertOne({"StudentName":"John","StudentAge":26,"AdmissionDate":new ISODate("2013-06-07")});
{
"acknowledged" : true,
"insertedId" : ObjectId("5c8a65799064dcd4a68b70ea")
}この例では、学生名・年齢・入学日(AdmissionDate)を格納したドキュメントを「dateDemo」コレクションに挿入しています。AdmissionDateにはnew ISODate("2013-06-07")を指定することで、日付型として正しく保存されます。
挿入したドキュメントの確認
find()メソッドを使えば、コレクション内のすべてのドキュメントを表示できます。
> db.dateDemo.find().pretty();
出力結果は以下の通りです。
{
"_id" : ObjectId("5c8a65799064dcd4a68b70ea"),
"StudentName" : "John",
"StudentAge" : 26,
"AdmissionDate" : ISODate("2013-06-07T00:00:00Z")
}時刻を指定せずに日付だけを渡した場合、自動的に「00:00:00Z」(UTCの午前0時)として保存される点に注目してください。
$gte演算子で日付条件を指定して検索する
それでは本題の日付クエリです。$gte(greater than or equal=以上)演算子とISODate()を組み合わせることで、「2013年6月7日以降に入学した学生」のような条件でドキュメントを絞り込めます。
> db.dateDemo.find({"AdmissionDate":{"$gte": ISODate("2013-06-07T00:00:00Z")}}).pretty();出力結果:
{
"_id" : ObjectId("5c8a65799064dcd4a68b70ea"),
"StudentName" : "John",
"StudentAge" : 26,
"AdmissionDate" : ISODate("2013-06-07T00:00:00Z")
}JohnさんのAdmissionDateが条件に合致しているため、該当ドキュメントが取得できました。
日付クエリ活用のポイント
- $gteは「指定日時以上」を意味し、境界の日時そのものも検索対象に含まれます。「より大きい」だけでよい場合は$gtを使用します。
- $lt(未満)、$lte(以下)などを組み合わせれば、「ある期間内のデータ」といった範囲検索も柔軟に実現できます。
- ISODate()の日時は内部的にUTC(協定世界時)で管理されるため、日本時間(JST)で扱う場合は9時間の時差に注意が必要です。
-
MongoDBで生年月日を年齢に変換する方法
MongoDBでは、集計パイプライン(aggregate)を活用することで、保存されている生年月日(DateOfBirth)のデータから現在の年齢を簡単に算出できます。この記事では、実際のコード例を使いながらその手順をわかりやすく解説します。1. コレクションにドキュメントを挿入するまずは、生年月日を含むドキュメントを持つコレクションを作成します。以下のように insertOne() メソッドを使用します。> db.demo754.insertOne({DateOfBirth:new Date(2000-05-03)}); { acknowledged : true, ins
-
MongoDBで1つのクエリを使って複数のドキュメントを一括更新する方法(bulkWrite活用ガイド)
MongoDBで1つのクエリで複数のドキュメントを更新するには?MongoDBで1回のリクエスト(1つのクエリ)で複数のドキュメントを効率的に更新したい場合は、bulkWrite()メソッドを使用します。bulkWrite()は、複数の書き込み操作(insert、update、deleteなど)をまとめてサーバーに送信できるため、個別にクエリを発行するよりもパフォーマンス面で優れています。ここでは、updateOne操作を組み合わせて、複数のドキュメントのフィールドを一度に更新する手順を具体的に解説します。1. コレクションの作成とドキュメントの挿入まず、insertOne()メソッドを使って