定義
$currentDate$currentDate演算子は、フィールドの値を現在の日付に設定します。 Date または タイムスタンプ として設定します。デフォルトの型は Date です。
互換性
次の環境でホストされる配置には $currentDate を使用できます。
MongoDB Atlas はクラウドでの MongoDB 配置のためのフルマネージド サービスです
MongoDB Enterprise: サブスクリプションベースの自己管理型 MongoDB バージョン
MongoDB Community: ソースが利用可能で、無料で使用できる自己管理型の MongoDB のバージョン
構文
$currentDate 演算子の形式は次のとおりです。
{ $currentDate: { <field1>: <typeSpecification1>, ... } }
<typeSpecification> 次のいずれかになります。
フィールド値を現在の日付として日付に設定するブール値
true、または{ $type: "timestamp" }または{ $type: "date" }のドキュメントで、型を明示的に指定するもの。この演算子は大文字と小文字を区別し、小文字の"timestamp"、または小文字の"date"のみを受け入れます。
<field> を埋め込みドキュメントまたは配列で指定するには、ドット表記を使用します。
動作
MongoDB 5.0 以降、更新演算子では名前が文字列ベースのドキュメントフィールドを辞書順に処理します。数値名のフィールドは、数値順に処理されます。詳細については、「更新演算子の動作」を参照してください。
$currentDate は、指定されたフィールドに $currentDate が実行された日付を設定します。
フィールドが存在しない場合、 $currentDateはドキュメントにフィールドを追加します。
MongoDB 5.0 以降、$currentDateなどの更新演算子を空のオペランド式({ })と併用しても、mongod でエラーが発生しなくなりました。空の更新を使用すると変更は一切されず、oplog エントリも作成されません(操作は実行されません)。
例
次のドキュメントを含むサンプル コレクションcustomersを作成します。
db.customers.insertOne( { _id: 1, status: "a", lastModified: ISODate("2013-10-02T01:11:18.965Z") } )
次の操作では、 lastModified フィールドを現在の日付に更新し、 "cancellation.date" フィールドを現在のタイムスタンプに更新し、 status フィールドを "D" に、 "cancellation.reason" を "user request"にアップデートします。
db.customers.updateOne( { _id: 1 }, { $currentDate: { lastModified: true, "cancellation.date": { $type: "timestamp" } }, $set: { "cancellation.reason": "user request", status: "D" } } )
$currentDate は、指定されたフィールドに $currentDate が実行された日付を設定します。
更新を確認するには:
db.customers.find()
更新されたされたドキュメントは次のようになります。
{ "_id" : 1, "status" : "D", "lastModified" : ISODate("2020-01-22T21:21:41.052Z"), "cancellation" : { "date" : Timestamp(1579728101, 1), "reason" : "user request" } }
lastModified フィールドは、前述の更新例で $currentDate が実行された日付に設定されます。
集計の代替手段 $currentDate
更新メソッドは集計パイプラインを受け入れることができます。 具体的には、集計ステージ$setと集計変数NOW (現在の日時)とCLUSTER_TIME (現在のタイムスタンプ)を使用して、前の例えを次のように書き換えることができます。
Tip
集計変数にアクセスするには、変数の前に二重ドル記号
$$を付け、引用符で囲みます。CLUSTER_TIMEレプリカセットとシャーディングされたクラスターでのみ利用可能です。NOWとCLUSTER_TIMEの値はパイプライン全体で同じままです。
db.customers.updateOne( { _id: 1 }, [ { $set: { lastModified: "$$NOW", cancellation: {date: "$$CLUSTER_TIME", reason: "user request"}, status: "D" } } ] )
操作後、コレクションをクエリして更新を確認できます。
db.customers.find().pretty()
クエリは、次のドキュメントを返す必要があります。
{ "_id" : 1, "status" : "D", "lastModified" : ISODate("2020-01-22T21:02:18.994Z"), "cancellation" : { "date" : Timestamp(1579726934, 2), "reason" : "user request" } }