Docs Menu
Docs Home
/
MongoDBマニュアル
/ / / /

$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 が実行された日付に設定されます。

更新メソッドは集計パイプラインを受け入れることができます。 具体的には、集計ステージ$setと集計変数NOW (現在の日時)とCLUSTER_TIME (現在のタイムスタンプ)を使用して、前の例えを次のように書き換えることができます。

Tip

  • 集計変数にアクセスするには、変数の前に二重ドル記号$$を付け、引用符で囲みます。

  • CLUSTER_TIME レプリカセットとシャーディングされたクラスターでのみ利用可能です。

  • NOWCLUSTER_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"
}
}

Tip

以下も参照してください。

戻る

フィールド