MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

MongoDB $dateToString

Di MongoDB, $dateToString operator pipa agregasi mengonversi objek tanggal tertentu menjadi string.

$dateToString operator menerima baik Date, Timestamp, atau ObjectId.

Anda dapat menentukan format yang akan digunakan untuk hasil dengan memberikan spesifikasi format. Spesifikasi format dapat berupa string literal apa pun, yang berisi 0 atau lebih penentu format.

Spesifikasi format adalah opsional dari MongoDB versi 4.0, ketika featureCompatibilityVersion diatur ke 4.0 atau lebih tinggi. Versi sebelumnya memerlukan spesifikasi format.

Anda dapat secara opsional menggunakan timezone parameter untuk menentukan zona waktu yang akan digunakan.

Anda juga dapat menggunakan onNull parameter untuk menentukan apa yang harus dikembalikan jika tanggalnya null atau hilang.

Contoh

Misalkan kita memiliki koleksi yang disebut pets dengan dokumen berikut:

{
	"_id" : ObjectId("600631c7c8eb4369cf6ad9c8"),
	"name" : "Fetch",
	"born" : ISODate("2020-12-31T23:30:15.123Z")
}

Kita dapat menjalankan kode berikut untuk mengembalikan string tanggal dari kode born bidang dalam dokumen itu.

db.pets.aggregate(
   [
     {
       $project: {
         _id: 0,
          dateString: { $dateToString: { format: "%Y-%m-%dT%H:%M:%S.%LZ", date: "$born" } }
       }
     }
   ]
)

Hasil:

{ "dateString" : "2020-12-31T23:30:15.123Z" }

Contoh ini menggunakan %Y-%m-%dT%H:%M:%S.%LZ sebagai spesifikasi format. Ini merupakan spesifikasi format default, tetapi dalam hal ini kami secara eksplisit menentukannya. Kita dapat melihat bahwa string tanggal dikembalikan menggunakan format yang ditentukan.

Di sini, saya menggunakan dateString sebagai nama bidang yang akan dikembalikan, tetapi ini bisa berupa apa saja (seperti formattedDate , theDate dll).

_id bidang dikembalikan secara default saat menggunakan proyeksi di MongoDB, tetapi dalam contoh ini saya secara eksplisit menyembunyikan _id kolom menggunakan _id: 0 .

Lihat MongoDB $dateToString Penentu Format untuk daftar penentu format yang tersedia.

Keluaran Default

Seperti yang disebutkan, spesifikasi format pada contoh sebelumnya adalah spesifikasi format default.

Jika Anda menggunakan MongoDB versi 4.0 atau lebih tinggi, dengan featureCompatibilityVersion setel ke 4.0 atau lebih tinggi (lihat cara melihat featureCompatibilityVersion Anda saat ini dan cara mengaturnya), Anda dapat menghilangkan spesifikasi format jika Anda ingin tanggal diformat menggunakan format di atas.

Oleh karena itu, kita bisa menulis ulang sebelumnya. contoh untuk ini:

db.pets.aggregate(
   [
     {
       $project: {
         _id: 0,
          dateString: { $dateToString: { date: "$born" } }
       }
     }
   ]
)

Hasil:

{ "dateString" : "2020-12-31T23:30:15.123Z" }

Tentukan Zona Waktu

Anda dapat menentukan zona waktu yang akan digunakan untuk output $dateToString operator.

Zona waktu dapat ditentukan menggunakan pengidentifikasi zona waktu Olson (mis. "Europe/London" , "GMT" ) atau offset UTC (mis. "+02:30" , "-1030" ).

Identifier Zona Waktu Olson

Berikut adalah contoh yang menampilkan string tanggal dalam tiga zona waktu berbeda, masing-masing menggunakan ID zona waktu Olson:

db.pets.aggregate(
   [
     {
       $project: {
         _id: 0,
          UTC: { $dateToString: { format: "%Y-%m-%dT%H:%M", date: "$born", timezone: "UTC" } },
          Honolulu: { $dateToString: { format: "%Y-%m-%dT%H:%M", date: "$born", timezone: "Pacific/Honolulu" } },
          Auckland: { $dateToString: { format: "%Y-%m-%dT%H:%M", date: "$born", timezone: "Pacific/Auckland" } }
       }
     }
   ]
).pretty()

Hasil:

{
	"UTC" : "2020-12-31T23:30",
	"Honolulu" : "2020-12-31T13:30",
	"Auckland" : "2021-01-01T12:30"
}

Offset UTC

Berikut adalah contoh yang menggunakan offset UTC.

db.pets.aggregate(
   [
     {
       $project: {
         _id: 0,
          UTC: { $dateToString: { format: "%Y-%m-%dT%H:%M", date: "$born", timezone: "+00:00" } },
          Honolulu: { $dateToString: { format: "%Y-%m-%dT%H:%M", date: "$born", timezone: "-10:00" } },
          Auckland: { $dateToString: { format: "%Y-%m-%dT%H:%M", date: "$born", timezone: "+12:00" } }
       }
     }
   ]
).pretty()

Hasil:

{
	"UTC" : "2020-12-31T23:30",
	"Honolulu" : "2020-12-31T13:30",
	"Auckland" : "2021-01-01T11:30"
}

Format Tanggal Minggu ISO

Ada beberapa penentu format yang memungkinkan Anda menampilkan string tanggal menggunakan format ISO 8601.

Secara khusus, Anda dapat menggunakan:

Penentu Format Keluaran
%G Tahun dalam format ISO 8601
%u Nomor hari dalam seminggu dalam format ISO 8601 (1-Senin, 7-Minggu)
%V Minggu Tahun dalam format ISO 8601

Misalkan kita memiliki koleksi yang disebut cats dengan dokumen berikut:

{
	"_id" : ObjectId("6008c9a5c8eb4369cf6ad9cc"),
	"name" : "Scratch",
	"born" : ISODate("2021-01-03T23:30:15.123Z")
}

Kita dapat menjalankan kode berikut untuk mengekstrak bidang tanggal ISO dari kode born bidang dalam dokumen itu.

Berikut ini contoh untuk didemonstrasikan:

db.cats.aggregate(
   [
     {
       $project: {
         _id: 0,
          isoYear: { $dateToString: { format: "%G", date: "$born" } },
          isoDayOfWeek: { $dateToString: { format: "%u", date: "$born" } },
          isoWeekOfYear: { $dateToString: { format: "%V", date: "$born" } }
       }
     }
   ]
)

Hasil:

{ "isoYear" : "2020", "isoDayOfWeek" : "7", "isoWeekOfYear" : "53" }

Sebaliknya, di bawah ini adalah contoh yang sama, tetapi menggunakan bagian tanggal minggu non-ISO.

db.cats.aggregate(
   [
     {
       $project: {
         _id: 0,
          year: { $dateToString: { format: "%Y", date: "$born" } },
          dayofweek: { $dateToString: { format: "%w", date: "$born" } },
          weekofyear: { $dateToString: { format: "%U", date: "$born" } }
       }
     }
   ]
)

Hasil:

{ "year" : "2021", "dayofweek" : "1", "weekofyear" : "01" }

Kita dapat melihat bahwa hasilnya benar-benar berbeda.

onNull Parameter

onNull parameter dapat digunakan untuk menentukan apa yang harus dikembalikan jika tanggalnya nol atau tidak ada.

Nilai yang diberikan ke onNull parameter dapat berupa ekspresi apa pun yang valid.

Ini contohnya:

db.pets.aggregate(
   [
     {
       $project: {
          _id: 0,
          dateString: { $dateToString: { date: null, onNull: "No date supplied" } }
       }
     }
   ]
)

Hasil:

{ "dateString" : "No date supplied" }

Dalam hal ini, tanggalnya adalah null dan dokumen keluaran menyertakan string yang saya berikan untuk onNull parameter.

Kembalikan Bagian Tanggal dari ObjectId

Anda dapat menggunakan $dateToString untuk mengembalikan string tanggal dari ObjectId.

Nilai ObjectId adalah nilai heksadesimal 12 byte yang terdiri dari:

  • Nilai cap waktu 4 byte, mewakili pembuatan ObjectId, diukur dalam detik sejak zaman Unix.
  • 5 byte adalah nilai acak
  • Penghitung pertambahan 3 byte, diinisialisasi ke nilai acak.

Untuk rekap, dokumen pertama kami terlihat seperti ini:

{
	"_id" : ObjectId("600631c7c8eb4369cf6ad9c8"),
	"name" : "Fetch",
	"born" : ISODate("2020-12-31T23:30:15.123Z")
}

Dokumen ini berisi ObjectId. Oleh karena itu, kita dapat menggunakan $dateToString untuk mengembalikan string tanggal, berdasarkan tanggal pembuatan dokumen kita (atau lebih khusus lagi, saat _id nilai ObjectId bidang telah dibuat).

Contoh:

db.pets.aggregate(
   [
     {
       $project: {
          timestamp: { $toDate: "$_id" },
          dateString: { $dateToString: { format: "%d-%m-%Y", date: "$_id" } }
       }
     }
   ]
).pretty()

Hasil:

{
	"_id" : ObjectId("600631c7c8eb4369cf6ad9c8"),
	"timestamp" : ISODate("2021-01-19T01:11:35Z"),
	"dateString" : "19-01-2021"
}

Dalam hal ini, saya memutuskan untuk mengembalikan hanya bagian tanggal (bukan bagian waktu). Saya juga mengubah urutan hari, bulan, dan tahun untuk menunjukkan bahwa Anda pasti dapat melakukan ini jika diperlukan.

Saya juga menggunakan $toDate operator pipa agregasi untuk mengembalikan bagian stempel waktu ObjectId.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Berapa jumlah maksimum pecahan yang dapat dimiliki MongoDB?

  2. $in membutuhkan array sebagai argumen kedua, ditemukan:hilang

  3. Bagaimana cara kerja pengurutan dengan indeks di MongoDB?

  4. Cara menggunakan Enkripsi untuk Melindungi data MongoDB

  5. Buat Database di MongoDB