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

MongoDB $hariTahun

Di MongoDB, $dayOfYear operator pipa agregasi mengembalikan hari dalam setahun untuk tanggal sebagai angka antara 1 dan 366 .

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

$dayOfYear 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 dalam setahun dari born bidang dalam dokumen itu.

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

Hasil:

{ "birthDayOfYear" : 366 } 

Di sini, saya menggunakan birthDayOfYear sebagai nama bidang yang akan dikembalikan, tetapi ini bisa berupa apa saja (seperti dayOfYear , 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 $dayOfYear operator.

Ketika Anda melakukan ini, argumen diteruskan ke $dayOfYear 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: { 
            $dayOfYear: { date: "$born", timezone: "Pacific/Honolulu" }
            },
          auckland: { 
            $dayOfYear: { date: "$born", timezone: "Pacific/Auckland" }
            }
        }
    }
  ]
)

Hasil:

{ "honolulu" : 366, "auckland" : 1 } 

Offset UTC

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

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

Hasil:

{ "utcOffset-1000" : 366, "utcOffset+1200" : 1 } 

Mengembalikan Hari Tahun dari ObjectId

Anda dapat menggunakan $dayOfYear untuk mengembalikan porsi hari 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 $dayOfYear untuk mengembalikan hari dari tahun pembuatan dokumen kita (atau lebih khusus lagi, saat _id nilai ObjectId bidang telah dibuat).

Contoh:

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

Hasil:

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

Kita dapat melihat bahwa dokumen itu dibuat pada hari ke 19 tahun itu.

Dalam hal ini, saya juga menggunakan $toDate operator pipeline agregasi untuk mengembalikan bagian stempel waktu ObjectId.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Arsitek untuk Keamanan :Panduan untuk MongoDB

  2. MongoDB $setIsSubset

  3. WiredTiger dan pembaruan di tempat

  4. Bantuan Kueri MongoDB - kueri tentang nilai kunci apa pun dalam sub-objek

  5. Penerapan &Pemantauan Basis Data Sumber Terbuka Gratis dengan Edisi Komunitas ClusterControl