$currentDate
定義
$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" } }