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

MongoDB $isoDayOfWeek

Di MongoDB, $isoDayOfWeek operator pipa agregasi mengembalikan nomor hari kerja dalam format ISO 8601, mulai dari 1 (untuk hari Senin) hingga 7 (untuk hari Minggu).

Anda dapat secara opsional menentukan zona waktu yang akan digunakan untuk hasil.

$isoDayOfWeek operator menerima baik tanggal (baik sebagai Tanggal, Timestamp, atau ObjectId), atau dokumen yang menentukan tanggal dan zona waktu untuk digunakan.

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 mengekstrak hari ISO dalam seminggu dari kode born bidang dalam dokumen itu.

db.pets.aggregate(
  [
    {
      $project:
        {
          _id: 0,
          birthIsoDayOfWeek: { $isoDayOfWeek: "$born" }
        }
    }
  ]
)

Hasil:

{ "birthIsoDayOfWeek" : 4 } 

Dalam hal ini kita mendapatkan hasil 4, yang merupakan hasil yang berbeda dengan yang saya dapatkan saat menggunakan $dayOfWeek operator terhadap dokumen yang sama.

Di sini, saya menggunakan birthIsoDayOfWeek sebagai nama bidang yang akan dikembalikan, tetapi ini bisa berupa apa saja (seperti isoDayOfWeek , day , dll).

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

Tentukan Zona Waktu

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

Saat Anda melakukan ini, argumen diteruskan ke $isoDayOfWeek harus dalam bentuk berikut:

{ date: <dateExpression>, timezone: <tzExpression> }

Dimana <dateExpression> adalah tanggal untuk digunakan, dan <tzExpression> adalah zona waktu yang digunakan.

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 hari dalam dua zona waktu yang berbeda, masing-masing menggunakan ID zona waktu Olson:

db.pets.aggregate(
  [
    {
      $project: {
          _id: 0,
          honolulu: { 
            $isoDayOfWeek: { date: "$born", timezone: "Pacific/Honolulu" }
            },
          auckland: { 
            $isoDayOfWeek: { date: "$born", timezone: "Pacific/Auckland" }
            }
        }
    }
  ]
)

Hasil:

{ "honolulu" : 4, "auckland" : 5 }

Offset UTC

Ini contoh yang sama, kecuali kali ini kita menggunakan offset UTC.

db.pets.aggregate(
  [
    {
      $project: {
          _id: 0,
          "utcOffset-1000": { 
            $isoDayOfWeek: { date: "$born", timezone: "-1000" }
            },
          "utcOffset+1200": { 
            $isoDayOfWeek: { date: "$born", timezone: "+1200" }
            }
        }
    }
  ]
)

Hasil:

{ "utcOffset-1000" : 4, "utcOffset+1200" : 5 }

Kembalikan Hari Minggu dari ObjectId

Anda dapat menggunakan $isoDayOfWeek untuk mengembalikan porsi hari minggu ISO dari 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.

Untuk rekap, dokumen 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 $isoDayOfWeek untuk mengembalikan hari ISO dalam seminggu saat dokumen kita dibuat (atau lebih khusus, ketika _id nilai ObjectId bidang telah dibuat).

Contoh:

db.pets.aggregate(
  [
    {
      $project:
        {
          "timeStamp": { $toDate: "$_id"},
          "isoDayOfWeek": { $isoDayOfWeek: "$_id" }
        }
    }
  ]
).pretty()

Hasil:

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

Kita dapat melihat bahwa dokumen tersebut dibuat pada hari ke-2 dalam seminggu dengan menggunakan format ISO 8601.

Dalam hal ini, 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. Kueri untuk mendapatkan data X menit terakhir dengan Mongodb

  2. Docker:ubah folder tempat menyimpan volume buruh pelabuhan

  3. Mengonversi string menjadi tanggal di mongodb

  4. Kiat Perencanaan Skema MongoDB

  5. Batas waktu terjadi setelah 30000ms memilih server menggunakan CompositeServerSelector