MongoDBで特定の期間内にログインしたユーザー数をカウントする方法
ユーザーのログイン日付が保存されているデータベースがあるとします。そこから「特定の期間内にログインしたユーザーは何人いるのか」を調べたいケースはよくあります。このような場合は、$gte(以上)と$lt(未満)の比較演算子をcount()メソッドと組み合わせることで簡単に実現できます。
サンプルコレクションの作成
まず、ログイン情報を持つドキュメントを含むコレクションを作成しましょう。
> 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")
}登録済みドキュメントの確認
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") }特定の期間内にログインしたユーザー数を取得する
MongoDBで特定の日付範囲内にログインしたユーザーの件数を検索するには、以下のようにクエリを記述します。ここでは、「2019年5月2日以上・2019年5月18日未満」にログインしたユーザーをカウントしています。
> db.findDataByDateDemo.count({"UserLoginDate":{ "$gte": new Date("2019-05-02"), "$lt": new Date("2019-05-18") }});実行結果は次の通りです。
2
この結果から、条件に合致するのはSam(2019年5月2日)とDavid(2019年5月16日)の2人であることがわかります。$gteは指定日を含み(以上)、$ltは指定日を含まない(未満)ため、期間の境界を厳密に制御できる点がポイントです。なお、最新のMongoDBでは非推奨となっているcount()の代わりに、countDocuments()やestimatedDocumentCount()の利用も検討するとよいでしょう。
-
MongoDBで価格が特定の値未満のレコードを検索する方法($lt演算子の使い方)
MongoDBで、価格(Price)が特定の値より小さいレコードを検索したい場合には、比較クエリ演算子の一つである $lt(less than)を使用します。$ltは「指定した値より小さい」ドキュメントのみを抽出するための演算子です。この記事では、実際にコレクションを作成し、$lt演算子を使って条件に合致するドキュメントを検索する手順を順番に解説します。1. テスト用コレクションの作成まず、insertOne() メソッドを使って、サンプル用のコレクション「demo728」にドキュメントを挿入します。> db.demo728.insertOne({Price:75}); { ac
-
MySQLで2つの日付の差を月単位で求める方法
MySQLで2つの日付の差を「月」単位で計算したい場合、TIMESTAMPDIFF()関数を使うと簡単に求められます。さらにABS()関数を組み合わせることで、日付の順序に関係なく常に正の値(絶対値)として結果を取得できます。本記事では、実際にテーブルを作成し、サンプルデータを使いながら具体的な手順を解説します。1. テーブルの作成まず、date型のカラムを2つ持つテーブルを作成しましょう。mysql> create table DemoTable -> ( -> Date1 date