MongoDBで「現在日時」と特定の日付の差分を取得する方法
MongoDBで現在日時(「今」)と特定の日付との差分を求めるには、aggregate()メソッドを使用します。まずは、サンプルとなるドキュメントを格納したコレクションを作成しましょう。
コレクションの作成とドキュメントの挿入
insertOne()メソッドを使って、複数の日付データを持つドキュメントをコレクションに挿入します。
> db.demo734.insertOne({GivenDate:new ISODate("2020-01-10")});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ead4f1a57bb72a10bcf064e")
}
> db.demo734.insertOne({GivenDate:new ISODate("2020-02-20")});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ead4f2157bb72a10bcf064f")
}
> db.demo734.insertOne({GivenDate:new ISODate("2010-12-01")});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ead4f2b57bb72a10bcf0650")
}
> db.demo734.insertOne({GivenDate:new ISODate("2020-05-01")});
{
"acknowledged" : true,
"insertedId" : ObjectId("5ead506f57bb72a10bcf0651")
}
find()メソッドですべてのドキュメントを表示する
続いて、find()メソッドを使ってコレクション内のすべてのドキュメントを確認します。
> db.demo734.find();
上記のコマンドを実行すると、次のような出力が得られます。
{ "_id" : ObjectId("5ead4f1a57bb72a10bcf064e"), "GivenDate" : ISODate("2020-01-10T00:00:00Z") }
{ "_id" : ObjectId("5ead4f2157bb72a10bcf064f"), "GivenDate" : ISODate("2020-02-20T00:00:00Z") }
{ "_id" : ObjectId("5ead4f2b57bb72a10bcf0650"), "GivenDate" : ISODate("2010-12-01T00:00:00Z") }
{ "_id" : ObjectId("5ead506f57bb72a10bcf0651"), "GivenDate" : ISODate("2020-05-01T00:00:00Z") }
「現在日時」と指定した日付の差分を求めるクエリ
以下は、「現在日時」と各ドキュメントのGivenDateフィールドとの差分を取得するための集計クエリです。
> db.demo734.aggregate([
... {$project: {
...
... "differenceMilli": {
...
... $subtract:[
... new ISODate(),
... "$GivenDate"
... ]
... }
... }
... },
... {$project: {
...
... "differenceMilli": 1,
... "differenceindays": {
... $divide: [
... "$differenceMilli",
... 1000 * 60 * 60 * 24
... ]
... }
... }
... }]
... )
このクエリを実行すると、以下のような出力が得られます。
{ "_id" : ObjectId("5ead4f1a57bb72a10bcf064e"), "differenceMilli" : NumberLong("9802234864"), "differenceindays" : 113.45179240740741 }
{ "_id" : ObjectId("5ead4f2157bb72a10bcf064f"), "differenceMilli" : NumberLong("6259834864"), "differenceindays" : 72.45179240740741 }
{ "_id" : ObjectId("5ead4f2b57bb72a10bcf0650"), "differenceMilli" : NumberLong("297255034864"), "differenceindays" : 3440.4517924074075 }
{ "_id" : ObjectId("5ead506f57bb72a10bcf0651"), "differenceMilli" : NumberLong(125434864), "differenceindays" : 1.4517924074074073 }
クエリのポイント
この集計パイプラインでは、2段階の$projectステージを使用しています。
- 第1段階: $subtract演算子により、new ISODate()(実行時点の現在日時)から各ドキュメントのGivenDateの値を減算し、ミリ秒単位の差分を「differenceMilli」フィールドとして算出します。
- 第2段階: $divide演算子により、ミリ秒の差分を1日あたりのミリ秒数(1000 × 60 × 60 × 24)で割ることで、差分を日数単位に変換して「differenceindays」フィールドに出力します。
出力結果を見ると、たとえば2020年5月1日のデータでは約1.45日、2010年12月1日のデータでは約3440日の差があることがわかります。この手法を応用すれば、経過日数に基づくデータの絞り込みやレポート作成などにも活用できます。
-
C#と.NETの違いをわかりやすく解説!言語とフレームワークの関係
C#と.NETの基本的な違いC#(シーシャープ)はマイクロソフトが開発したプログラミング言語であり、一方の.NET(ドットネット)はアプリケーション開発を支援するフレームワークです。この2つは密接な関係にありますが、それぞれの役割はまったく異なります。.NETの中核となる「共通言語ランタイム(CLR)」.NETには「共通言語ランタイム(CLR:Common Language Runtime)」と呼ばれる仮想的な実行環境が組み込まれています。CLRはメモリ管理、例外処理、セキュリティなどを担当し、.NET上で動作するすべてのアプリケーションの土台となる重要なコンポーネントです。C#だけじゃない!
-
GoとJavaの違いを徹底比較!特徴と使い分けのポイント
プログラミング言語を選ぶ際、「Go」と「Java」のどちらを採用すべきか迷う開発者は少なくありません。どちらもGoogleや企業システムで広く使われる人気言語ですが、設計思想や言語仕様には大きな違いがあります。本記事では、それぞれの言語の特徴を解説したうえで、両者の主な違いを比較表を使ってわかりやすく整理します。 GoとはGoはGoogleが開発した手続き型(プロシージャル)プログラミング言語です。プログラムはパッケージ単位で構成され、シンプルで読みやすいコード記述を重視した設計になっています。動的言語に近い柔軟なパターンを取り入れつつ、静的型付けによる安全性も兼ね備えています。また、軽量スレ