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

MongoDBで生年月日を年齢に変換する方法

MongoDBでは、集計パイプライン(aggregate)を活用することで、保存されている生年月日(DateOfBirth)のデータから現在の年齢を簡単に算出できます。この記事では、実際のコード例を使いながらその手順をわかりやすく解説します。

1. コレクションにドキュメントを挿入する

まずは、生年月日を含むドキュメントを持つコレクションを作成します。以下のように insertOne() メソッドを使用します。

> db.demo754.insertOne({"DateOfBirth":new Date("2000-05-03")});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5eae9b2da930c785c834e56f")
}
> db.demo754.insertOne({"DateOfBirth":new Date("2010-01-21")});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5eae9b34a930c785c834e570")
}
> db.demo754.insertOne({"DateOfBirth":new Date("2018-05-03")});
{
   "acknowledged" : true,
   "insertedId" : ObjectId("5eae9b3da930c785c834e571")
}

2. すべてのドキュメントを表示する

find() メソッドを使うと、コレクション内のすべてのドキュメントを確認できます。

> db.demo754.find();

上記のコマンドを実行すると、次のような出力が得られます。

{ "_id" : ObjectId("5eae9b2da930c785c834e56f"), "DateOfBirth" : ISODate("2000-05-03T00:00:00Z") }
{ "_id" : ObjectId("5eae9b34a930c785c834e570"), "DateOfBirth" : ISODate("2010-01-21T00:00:00Z") }
{ "_id" : ObjectId("5eae9b3da930c785c834e571"), "DateOfBirth" : ISODate("2018-05-03T00:00:00Z") }

3. 生年月日から年齢を算出するクエリ

続いて、aggregate() と $project を組み合わせて、生年月日を年齢に変換するクエリを実行します。

> db.demo754.aggregate( [ {
...    $project: {
...       date:"$DateOfBirth",
...          StudentAge: {
...             $divide: [{$subtract: [ new Date(), "$DateOfBirth" ] },
...             (365 * 24*60*60*1000)]
...          }
...       }
... } ] )

クエリの仕組み

このクエリのポイントは以下の通りです。

  • $subtract 演算子で「現在日時(new Date())」と「生年月日」の差分(ミリ秒)を求めます。
  • その結果を $divide 演算子で「1年間のミリ秒数(365 × 24 × 60 × 60 × 1000)」で割ることで、年単位の年齢を計算します。

実行すると、次のような結果が出力されます。

{ "_id" : ObjectId("5eae9b2da930c785c834e56f"), "date" : ISODate("2000-05-03T00:00:00Z"), "StudentAge" : 20.014896543093606 }
{ "_id" : ObjectId("5eae9b34a930c785c834e570"), "date" : ISODate("2010-01-21T00:00:00Z"), "StudentAge" : 10.288869145833333 }
{ "_id" : ObjectId("5eae9b3da930c785c834e571"), "date" : ISODate("2018-05-03T00:00:00Z"), "StudentAge" : 2.003937638984018 }

補足:小数点以下を切り捨てて整数の年齢を取得するには

上記の出力例のように、計算結果は小数値になります。整数の年齢として表示したい場合は、$floor 演算子や $trunc 演算子を組み合わせると便利です。

> db.demo754.aggregate( [ {
...    $project: {
...       date: "$DateOfBirth",
...       StudentAge: {
...          $floor: {
...             $divide: [
...                { $subtract: [ new Date(), "$DateOfBirth" ] },
...                (365 * 24 * 60 * 60 * 1000)
...             ]
...          }
...       }
...    }
... } ] )

$floor を使えば、20.01… のような値が 20 と切り捨てられ、一般的な「満年齢」に近い形で表示できます。

まとめ

MongoDBの集計フレームワークでは、日付同士の減算結果がミリ秒として返されるため、それを1年のミリ秒数で割ることで年齢を算出できます。$project 内で新しいフィールドとして出力すれば、元のコレクションのデータを変更することなく、柔軟に年齢計算を行えます。用途に応じて $floor や $round を組み合わせれば、より扱いやすい形式に整形できるので、ぜひ活用してみてください。

  1. MongoDBで配列を持つ1つのドキュメントを新しいコレクションの複数ドキュメントに変換する方法

    MongoDBでは、配列フィールドを持つ1つのドキュメントを、配列の各要素に対応する複数のドキュメントとして新しいコレクションに変換できます。この処理には、集計パイプラインのaggregate()と$unwind、そして結果を別のコレクションに出力するための$outを組み合わせて使用します。サンプルコレクションの作成まず、insertOne()メソッドを使ってドキュメントを挿入し、コレクションを作成しましょう。> db.demo757.insertOne( ... { ... id: 101, ... Name: [John, Bob, Chris]

  2. MySQLでテーブルの日付レコードを変更する方法|UPDATEとDATE_ADD()の使い方

    MySQLで保存済みの日付データに年数を加算して変更したい場合、UPDATEコマンドとDATE_ADD()関数を組み合わせることで簡単に実現できます。ここでは、実際のSQLクエリ例を使いながら、日付レコードを変更する手順を順番に解説します。1. テーブルを作成するまず、日付型(date)のカラムを持つテーブルを作成します。mysql> create table DemoTable1984 ( ShippingDate date ); Query OK, 0 rows affected (0.00 sec)2. レコードを挿入する次に、INSERTコマンドを使ってテ