MongoDB
 Computer >> コンピューター >  >> プログラミング >> MongoDB

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を組み合わせた範囲検索を使えば、特定の日や期間ごとのログイン数などを簡単に集計できます。アクセス解析やレポート作成など、さまざまなシーンで役立つテクニックなので、ぜひ覚えておきましょう。

  1. MongoDBで特定の文字列を含むドキュメントを検索する方法($regexの使い方)

    MongoDBで特定の文字列を含むドキュメントを見つける方法MongoDBで特定の文字列が含まれるドキュメントを検索したい場合、find()メソッドと$regex演算子を組み合わせて使用します。$regexを使うことで、部分一致や大文字・小文字を区別しない柔軟な検索が可能になります。この記事では、実際のコレクションを作成しながら、特定の文字列を含むドキュメントを抽出する手順を解説します。1. テスト用コレクションとドキュメントの作成まず、insertOne()メソッドを使ってサンプルコレクション「demo597」にドキュメントを挿入します。> db.demo597.insertOne({

  2. AEMとMongoDBの連携徹底解説:MongoMKのアーキテクチャとマルチサイト運用の落とし穴

    MongoDBとは何か?MongoDBは、ドキュメント指向のNoSQLデータベースです。従来のリレーショナルモデル(RDBMS)から離れ、柔軟かつ水平スケール可能なデータ管理の仕組みを提供します。JSONライクなドキュメント形式(BSON)でデータを格納するため、構造が流動的なコンテンツやアプリケーション開発に適しており、Adobe Experience Manager(AEM)のような大規模コンテンツ管理プラットフォームとの組み合わせでも注目されてきました。 AEMとMongoDBはどのように連携するのか?AEMとMongoDBの連携は、crx3mongo ランモードと、JVMオプションの