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)の自動更新やリマインダー処理など、実務でも応用範囲の広いテクニックなので、ぜひ活用してください。
-
JavaScriptでさまざまな日付形式を扱う方法|サンプルコード付きで解説
JavaScriptで日付を扱う際は、組み込みのDateオブジェクトを使用します。Dateコンストラクタにさまざまな形式の文字列を渡すことで、それぞれの形式に応じた日付オブジェクトを生成できます。ここでは、複数の日付形式を実際にページへ表示するサンプルコードを紹介します。コード例<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="wi
-
MongoDBでドキュメントを削除せずに1件だけ更新する方法(updateOneの使い方)
MongoDBのコレクション内で1つのドキュメントだけを更新したい場合は、updateOne()メソッドを使用します。updateOne()は、指定したフィルター条件に一致した最初の1件のドキュメントのみを更新するメソッドです。既存のデータを削除することなく、特定のフィールドだけを安全に書き換えられます。サンプルコレクションの作成まず、動作確認用にドキュメントを含むコレクションを作成します。> db.demo495.insertOne({FirstName:Chris,Age:19});{ acknowledged : true, insertedId : ObjectI