【MongoDB】日付範囲内のレコードを取得するクエリの書き方
MongoDBで特定の日付範囲内のレコードを取得するには、比較演算子「$gt」(より大きい)と「$lt」(より小さい)を組み合わせて使用します。この記事では、実際のコード例を通じて、日付範囲検索の基本的な方法をわかりやすく解説します。
1. サンプルコレクションの作成
まずは、日付フィールドを持つドキュメントを挿入して、テスト用のコレクションを作成しましょう。
> db.demo60.insertOne({"ArrivalDate":new ISODate("2019-01-11 12:30:10")});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e2863fecfb11e5c34d89927")
}
> db.demo60.insertOne({"ArrivalDate":new ISODate("2019-10-12 03:10:00")});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e28641acfb11e5c34d89928")
}
> db.demo60.insertOne({"ArrivalDate":new ISODate("2019-01-14 05:11:20")});
{
"acknowledged" : true,
"insertedId" : ObjectId("5e28642acfb11e5c34d89929")
}2. 登録されたすべてのドキュメントを確認
find()メソッドを使用すると、コレクション内のすべてのドキュメントを表示できます。
> db.demo60.find();
このクエリを実行すると、以下のような出力が得られます。
{ "_id" : ObjectId("5e2863fecfb11e5c34d89927"), "ArrivalDate" : ISODate("2019-01-11T12:30:10Z") }
{ "_id" : ObjectId("5e28641acfb11e5c34d89928"), "ArrivalDate" : ISODate("2019-10-12T03:10:00Z") }
{ "_id" : ObjectId("5e28642acfb11e5c34d89929"), "ArrivalDate" : ISODate("2019-01-14T05:11:20Z") }3. 日付範囲内のレコードを取得するクエリ
ここからが本題です。$gt(より大きい)と$lt(より小さい)を組み合わせることで、指定した期間内のレコードのみを抽出できます。
> db.demo60.find({"ArrivalDate": {"$gt":ISODate("2019-01-09T12:30:10Z"), "$lt": ISODate("2019-01-16T12:30:10Z")}});実行結果は次のとおりです。
{ "_id" : ObjectId("5e2863fecfb11e5c34d89927"), "ArrivalDate" : ISODate("2019-01-11T12:30:10Z") }
{ "_id" : ObjectId("5e28642acfb11e5c34d89929"), "ArrivalDate" : ISODate("2019-01-14T05:11:20Z") }2019年1月9日〜16日の範囲に該当する2件のドキュメントだけが返され、範囲外の「2019-10-12」のレコードが除外されていることが確認できます。
補足:境界値も含めて検索したい場合
$gt / $lt は境界値そのものを結果に含みません。境界の日時も条件に含めたい場合は、それぞれ$gte(以上)と$lte(以下)を使用してください。
> db.demo60.find({"ArrivalDate": {"$gte":ISODate("2019-01-09T12:30:10Z"), "$lte": ISODate("2019-01-16T12:30:10Z")}});また、大量のデータを扱う場合は、あらかじめ日付フィールドにインデックスを作成しておくことで、範囲検索のパフォーマンスを大幅に向上させることができます。
> db.demo60.createIndex({"ArrivalDate": 1});
-
MongoDBでネストされた値を取得するクエリの書き方(ドット記法の使い方)
MongoDBでネストされた値を取得する方法MongoDBでは、ドット記法(dot notation)を使用することで、ドキュメント内にネストされたフィールドの値を簡単に取得できます。ネストされたフィールドにアクセスする際は、「親フィールド名.子フィールド名」の形式で指定します。この記事では、実際にサンプルコレクションを作成し、ネストされた値を取得するクエリの書き方を順を追って解説します。1. ドキュメントを含むコレクションを作成するまず、ネストされたドキュメントを持つコレクションを作成しましょう。以下の例では、nestedQueryDemoというコレクションに従業員情報を挿入しています。従業
-
MongoDBでDate/ISODateの各コンポーネント(年・月・日・時・分・秒)を取得する方法
MongoDBでDate(ISODate)の各コンポーネント(年・月・日・時・分・秒など)を取得するには、まずコレクションに日付を含むドキュメントを作成します。ここでは、実際のコード例を通して手順をわかりやすく解説します。1. 日付を含むドキュメントの作成まず、insert()メソッドを使って、現在日時を持つドキュメントをコレクションに挿入します。> db.componentOfDateDemo.insert({"ShippingDate":new Date()}); WriteResult({ "nInserted" : 1 })2. find(