Di MongoDB, $toDate
operator agregasi mengonversi nilai menjadi tanggal
$toDate
mengambil ekspresi yang valid. Jika ekspresi tidak dapat dikonversi ke tanggal, itu akan mengembalikan kesalahan. Jika ekspresinya null
atau hilang, ia mengembalikan null
.
Contoh
Misalkan kita memiliki koleksi yang disebut samples
dengan dokumen berikut:
{ "_id" : ObjectId("60066f1cc8eb4369cf6ad9c9"), "double" : 1613372035500.75, "decimal" : NumberDecimal("1613372035500.75"), "long" : NumberLong("1613372035500"), "string" : "2021-02-15 06:53:55" }
Kita dapat menggunakan kueri berikut untuk mengembalikan masing-masing nilai tersebut sebagai Tanggal.
db.samples.aggregate(
[
{
$project:
{
_id: 0,
"ObjectId": { $toDate: "$_id" },
"double": { $toDate: "$double" },
"decimal": { $toDate: "$decimal" },
"long": { $toDate: "$long" },
"string": { $toDate: "$string" }
}
}
]
).pretty()
Hasil:
{ "ObjectId" : ISODate("2021-01-19T05:33:16Z"), "double" : ISODate("2021-02-15T06:53:55.500Z"), "decimal" : ISODate("2021-02-15T06:53:55.500Z"), "long" : ISODate("2021-02-15T06:53:55.500Z"), "string" : ISODate("2021-02-15T06:53:55Z") }
Seperti yang diharapkan, semua bidang dikembalikan dengan nilai terkait yang dikonversi ke nilai Tanggal.
Anda mungkin memperhatikan bahwa bidang ObjectId mengembalikan tanggal yang berbeda dengan yang lain. Ini karena _id
nilai bidang mencerminkan tanggal dokumen dibuat, sedangkan tanggal lainnya hanyalah tanggal arbitrer yang dibuat oleh saya. Selengkapnya tentang ObjectId di bawah ini.
Jenis Masukan
$toDate
operator menerima jenis input berikut:
- Ganda
- Desimal
- Panjang
- String (harus berupa string tanggal yang valid)
- Id Objek
Selengkapnya tentang ini di bawah.
Tipe Numerik
Saat menggunakan tipe numerik (Ganda, Desimal, dan Panjang), $toDate
mengembalikan tanggal yang sesuai dengan jumlah milidetik yang diwakili oleh nilai. Untuk Double dan Desimal, ini adalah nilai yang terpotong. $toDate
operator menginterpretasikan nilai numerik sebagai berikut:
- Nilai positif sesuai dengan jumlah milidetik sejak 1 Januari 1970.
- Nilai negatif sesuai dengan jumlah milidetik sebelum 1 Januari 1970.
Jenis String
Saat menggunakan tipe string, string harus berupa string tanggal yang valid. Misalnya:
"2021-02-15"
"15 February 2021"
"2021-02-15 06:53:55"
"2021-02-15 06:53:55+1100"
Anda tidak dapat menggunakan tanggal yang tidak lengkap atau nilai yang tidak valid seperti "Monday"
, "March"
, "2020"
, dll.
ObjectId
Nilai ObjectId adalah nilai heksadesimal 12 byte yang terdiri dari:
- Nilai cap waktu 4 byte, yang mewakili pembuatan ObjectId, diukur dalam detik sejak zaman Unix.
- 5 byte adalah nilai acak
- Penghitung pertambahan 3 byte, diinisialisasi ke nilai acak.
$toDate
operator mengembalikan bagian cap waktu sebagai Tanggal.