MongoDBで特定の日付のデータを検索・カウントする方法
MongoDBで特定の日付のデータを検索・カウントする方法
ユーザーのログイン日付を保存しているとしましょう。「特定の日付のレコード件数だけを取得したい」というニーズはよくあります。そんなときは、$gte(以上)と$lt(未満)という比較演算子をcount()と組み合わせるのが効果的です。
本記事では、サンプルコレクションを作成し、特定の日付範囲に該当するデータを検索して件数を取得するまでの手順を、実際のコマンド例とともに解説します。
ステップ1:サンプルコレクションの作成
まず、insertOne()メソッドを使って、ユーザー名とログイン日付を持つドキュメントを順番に登録していきます。
> db.findDataByDateDemo.insertOne({"UserName":"John","UserLoginDate":new ISODate("2019-01-31")});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cdd8cd7bf3115999ed511ed")
}
> db.findDataByDateDemo.insertOne({"UserName":"Larry","UserLoginDate":new ISODate("2019-02-01")});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cdd8ce7bf3115999ed511ee")
}
> db.findDataByDateDemo.insertOne({"UserName":"Sam","UserLoginDate":new ISODate("2019-05-02")});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cdd8cf3bf3115999ed511ef")
}
> db.findDataByDateDemo.insertOne({"UserName":"David","UserLoginDate":new ISODate("2019-05-16")});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cdd8d00bf3115999ed511f0")
}
> db.findDataByDateDemo.insertOne({"UserName":"Carol","UserLoginDate":new ISODate("2019-10-19")});
{
"acknowledged" : true,
"insertedId" : ObjectId("5cdd8d0ebf3115999ed511f1")
}ステップ2:登録済みドキュメントの確認
find()メソッドを実行すると、コレクション内のすべてのドキュメントを一覧表示できます。
> db.findDataByDateDemo.find();
実行すると、次のような出力が得られます。
{ "_id" : ObjectId("5cdd8cd7bf3115999ed511ed"), "UserName" : "John", "UserLoginDate" : ISODate("2019-01-31T00:00:00Z") }
{ "_id" : ObjectId("5cdd8ce7bf3115999ed511ee"), "UserName" : "Larry", "UserLoginDate" : ISODate("2019-02-01T00:00:00Z") }
{ "_id" : ObjectId("5cdd8cf3bf3115999ed511ef"), "UserName" : "Sam", "UserLoginDate" : ISODate("2019-05-02T00:00:00Z") }
{ "_id" : ObjectId("5cdd8d00bf3115999ed511f0"), "UserName" : "David", "UserLoginDate" : ISODate("2019-05-16T00:00:00Z") }
{ "_id" : ObjectId("5cdd8d0ebf3115999ed511f1"), "UserName" : "Carol", "UserLoginDate" : ISODate("2019-10-19T00:00:00Z") }ステップ3:特定の日付範囲でデータを検索する
以下が、MongoDBで特定の日付のデータを検索するクエリの例です。ここでは、「2019年5月2日」から「2019年5月18日」までの間にログインしたユーザーの件数を取得しています。
> db.findDataByDateDemo.count({"UserLoginDate":{ "$gte": new Date("2019-05-02"), "$lt": new Date("2019-05-18") }});条件に該当するのは「Sam」(2019-05-02)と「David」(2019-05-16)の2件のみなので、実行結果は次のようになります。
2
ポイント解説
- $gte:指定した日時「以上」のデータに一致します(Greater Than or Equal)。
- $lt:指定した日時「未満」のデータに一致します(Less Than)。
- new Date("YYYY-MM-DD") はUTCの午前0時として扱われるため、日付境界の扱いには注意が必要です。
- MongoDB 4.0以降では、旧式のcount()は非推奨のため、実運用ではcountDocuments()の利用が推奨されています。
このように、$gteと$ltを組み合わせた範囲検索を使えば、特定の日や期間ごとのログイン数などを簡単に集計できます。アクセス解析やレポート作成など、さまざまなシーンで役立つテクニックなので、ぜひ覚えておきましょう。
-
MongoDBで特定の文字列を含むドキュメントを検索する方法($regexの使い方)
MongoDBで特定の文字列を含むドキュメントを見つける方法MongoDBで特定の文字列が含まれるドキュメントを検索したい場合、find()メソッドと$regex演算子を組み合わせて使用します。$regexを使うことで、部分一致や大文字・小文字を区別しない柔軟な検索が可能になります。この記事では、実際のコレクションを作成しながら、特定の文字列を含むドキュメントを抽出する手順を解説します。1. テスト用コレクションとドキュメントの作成まず、insertOne()メソッドを使ってサンプルコレクション「demo597」にドキュメントを挿入します。> db.demo597.insertOne({
-
AEMとMongoDBの連携徹底解説:MongoMKのアーキテクチャとマルチサイト運用の落とし穴
MongoDBとは何か?MongoDBは、ドキュメント指向のNoSQLデータベースです。従来のリレーショナルモデル(RDBMS)から離れ、柔軟かつ水平スケール可能なデータ管理の仕組みを提供します。JSONライクなドキュメント形式(BSON)でデータを格納するため、構造が流動的なコンテンツやアプリケーション開発に適しており、Adobe Experience Manager(AEM)のような大規模コンテンツ管理プラットフォームとの組み合わせでも注目されてきました。 AEMとMongoDBはどのように連携するのか?AEMとMongoDBの連携は、crx3mongo ランモードと、JVMオプションの