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

MongoDBの更新に向けてJavaScriptで日付をインクリメントする方法

MongoDBのドキュメントを更新する際に、日付を加算(インクリメント)したいケースはよくあります。JavaScriptでは getDate() で現在の日付を取得し、setDate() に加算後の値を渡すことで、簡単に日付を進めることができます。本記事では、実際のコード例を交えながら手順を解説します。

1. コレクションを作成する

まず、ドキュメントを含むコレクションを作成します。ここでは例として「demo168」というコレクションに、DueDate フィールドが null のドキュメントを挿入します。

> db.demo168.insertOne({"DueDate":null});
{
    "acknowledged" : true,
    "insertedId" : ObjectId("5e3695ae9e4f06af551997d6")
}

2. ドキュメントを確認する

find() メソッドを使って、コレクション内のすべてのドキュメントを表示します。

> db.demo168.find();

実行すると、次のような出力が得られます。

{ "_id" : ObjectId("5e3695ae9e4f06af551997d6"), "DueDate" : null }

3. JavaScriptで日付をインクリメントして更新する

続いて、JavaScriptで日付を加算し、その結果を使ってMongoDBのドキュメントを更新します。$currentDate 演算子で現在日時を設定しつつ、$set 演算子で加算済みの日付を新しいフィールドに書き込んでいます。

> var t = new Date();
> t.setDate(t.getDate()+1);
1580722089017
>
> var dat = new Date();
> dat .setDate(dat .getDate()+2);
1580808489085
>
> db.demo168.update(
...    { "_id": ObjectId("5e3695ae9e4f06af551997d6") },
...    {
...       "$currentDate": { "DueDate": true },
...       "$set": {
...          "DueDate1": t,
...          "DueDate2": dat
...       }
...    }
... )
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

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

  • t.setDate(t.getDate()+1) … 今日の日付に1日を加算し、翌日の日付を生成します。
  • dat.setDate(dat.getDate()+2) … 同様に2日を加算し、明後日の日付を生成します。
  • $currentDate … 指定したフィールドを現在の日時に更新します。
  • $set … JavaScript側で計算した日付オブジェクトを各フィールドに設定します。

4. 更新結果を確認する

再度 find() メソッドを実行して、コレクション内のドキュメントを表示します。

> db.demo168.find();

実行すると、次のように日付が正しく更新されていることが確認できます。

{ "_id" : ObjectId("5e3695ae9e4f06af551997d6"), "DueDate" : ISODate("2020-02-02T09:28:09.308Z"), "DueDate1" : ISODate("2020-02-03T09:28:09.017Z"), "DueDate2" : ISODate("2020-02-04T09:28:09.085Z") }

補足:より現代的な書き方

MongoDB 4.2以降では、非推奨となった db.collection.update() の代わりに updateOne()updateMany() を使うことが推奨されています。また、サーバー側で日付の加算を行いたい場合は、集計パイプラインによる更新や $dateAdd 演算子(MongoDB 5.0以降)を利用すると、アプリケーション側で日付を計算せずに済みます。

> db.demo168.updateOne(
...    { "_id": ObjectId("5e3695ae9e4f06af551997d6") },
...    { "$set": { "DueDate1": t } }
... )

このように、JavaScriptの標準的な日付操作メソッドとMongoDBの更新演算子を組み合わせることで、柔軟に日付フィールドを管理できます。期限日(DueDate)の自動更新やリマインダー処理など、実務でも応用範囲の広いテクニックなので、ぜひ活用してください。

  1. JavaScriptでさまざまな日付形式を扱う方法|サンプルコード付きで解説

    JavaScriptで日付を扱う際は、組み込みのDateオブジェクトを使用します。Dateコンストラクタにさまざまな形式の文字列を渡すことで、それぞれの形式に応じた日付オブジェクトを生成できます。ここでは、複数の日付形式を実際にページへ表示するサンプルコードを紹介します。コード例<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="wi

  2. MongoDBでドキュメントを削除せずに1件だけ更新する方法(updateOneの使い方)

    MongoDBのコレクション内で1つのドキュメントだけを更新したい場合は、updateOne()メソッドを使用します。updateOne()は、指定したフィルター条件に一致した最初の1件のドキュメントのみを更新するメソッドです。既存のデータを削除することなく、特定のフィールドだけを安全に書き換えられます。サンプルコレクションの作成まず、動作確認用にドキュメントを含むコレクションを作成します。> db.demo495.insertOne({FirstName:Chris,Age:19});{ acknowledged : true, insertedId : ObjectI