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

MongoDB $dateFromParts

Di MongoDB, $dateFromParts operator pipeline agregasi membuat dan mengembalikan objek Date dari bagian penyusun tanggal.

Anda memberikan setiap bagian tanggal sebagai bidang terpisah.

Anda dapat menentukan bidang tanggal konstituen Anda dalam format tanggal minggu ISO jika diperlukan.

Contoh

Misalkan kita memiliki koleksi yang disebut dateParts dengan dokumen berikut:

{
	"_id" : 1,
	"year" : 2020,
	"month" : 12,
	"day" : 31,
	"hour" : 23,
	"minute" : 30,
	"second" : 25,
	"millisecond" : 123
}

Dokumen berisi bidang yang berbeda untuk setiap bagian tanggal.

Kita dapat menjalankan kode berikut untuk mengembalikan objek tanggal dari kolom dalam dokumen tersebut.

db.dateParts.aggregate([
{
   $project: {
      date: {
         $dateFromParts: {
            "year": "$year", 
            "month": "$month", 
            "day": "$day", 
            "hour": "$hour", 
            "minute": "$minute", 
            "second": "$second", 
            "millisecond": "$millisecond"
         }
      }
   }
}])

Hasil:

{ "_id" : 1, "date" : ISODate("2020-12-31T23:30:25.123Z") }

Semua bagian tanggal/waktu telah diubah menjadi satu objek tanggal.

Zona waktu

Anda dapat menggunakan timezone bidang untuk menentukan zona waktu.

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 menggunakan ID zona waktu Olson untuk menampilkan tiga tanggal berbeda dari satu dokumen, berdasarkan tiga zona waktu berbeda.

db.dateParts.aggregate([
{
   $project: {
      dateUTC: {
         $dateFromParts: {
            "year": "$year", 
            "month": "$month", 
            "day": "$day", 
            "hour": "$hour", 
            "minute": "$minute", 
            "second": "$second", 
            "millisecond": "$millisecond",
            "timezone": "Pacific/Auckland"
         }
      },
      dateHonolulu: {
         $dateFromParts: {
            "year": "$year", 
            "month": "$month", 
            "day": "$day", 
            "hour": "$hour", 
            "minute": "$minute", 
            "second": "$second", 
            "millisecond": "$millisecond",
            "timezone": "Pacific/Honolulu"
         }
      },
      dateAuckland: {
         $dateFromParts: {
            "year": "$year", 
            "month": "$month", 
            "day": "$day", 
            "hour": "$hour", 
            "minute": "$minute", 
            "second": "$second", 
            "millisecond": "$millisecond",
            "timezone": "Pacific/Auckland"
         }
      }
   }
}]).pretty()

Hasil:

{
	"_id" : 1,
	"dateUTC" : ISODate("2020-12-31T10:30:25.123Z"),
	"dateHonolulu" : ISODate("2021-01-01T09:30:25.123Z"),
	"dateAuckland" : ISODate("2020-12-31T10:30:25.123Z")
}

Offset UTC

Berikut adalah contoh yang menggunakan offset UTC.

db.dateParts.aggregate([
{
   $project: {
      "date+00:00": {
         $dateFromParts: {
            "year": "$year", 
            "month": "$month", 
            "day": "$day", 
            "hour": "$hour", 
            "minute": "$minute", 
            "second": "$second", 
            "millisecond": "$millisecond",
            "timezone": "+00:00"
         }
      },
      "date-10:00": {
         $dateFromParts: {
            "year": "$year", 
            "month": "$month", 
            "day": "$day", 
            "hour": "$hour", 
            "minute": "$minute", 
            "second": "$second", 
            "millisecond": "$millisecond",
            "timezone": "-10:00"
         }
      },
      "date+12:00": {
         $dateFromParts: {
            "year": "$year", 
            "month": "$month", 
            "day": "$day", 
            "hour": "$hour", 
            "minute": "$minute", 
            "second": "$second", 
            "millisecond": "$millisecond",
            "timezone": "+12:00"
         }
      }
   }
}]).pretty()

Hasil:

{
	"_id" : 1,
	"date+00:00" : ISODate("2020-12-31T23:30:25.123Z"),
	"date-10:00" : ISODate("2021-01-01T09:30:25.123Z"),
	"date+12:00" : ISODate("2020-12-31T11:30:25.123Z")
}

Format Tanggal Minggu ISO

Bagian tanggal dapat ditentukan menggunakan format ISO 8601 jika diperlukan.

Secara khusus, Anda dapat menggunakan:

Penentu Format Keluaran
isoWeekYear Tahun dalam format ISO 8601. Kolom ini wajib diisi jika tidak menggunakan year (dan year diperlukan jika tidak menggunakan isoWeekYear ).
isoWeek Minggu dalam setahun dalam format ISO 8601. Hanya dapat digunakan dengan isoWeekYear .
isoDayOfWeek Hari dalam seminggu (1-Senin, 7-Minggu). Hanya dapat digunakan dengan isoWeekYear .

Misalkan kita menyisipkan dokumen kedua yang terlihat seperti ini:

{
	"_id" : 2,
	"isoWeekYear" : 2021,
	"isoWeek" : 32,
	"isoDayOfWeek" : 7,
	"hour" : 23,
	"minute" : 30,
	"second" : 25,
	"millisecond" : 123,
	"timezone" : "UTC"
}

Kita dapat melihat bahwa ia menggunakan isoWeekYear , isoWeek , dan isoDayOfWeek bukannya year , month , dan day (yang digunakan oleh dokumen pertama).

Kita dapat menggunakan kode berikut untuk membuat objek Date dari dokumen ini:

db.dateParts.aggregate([
  { $match: { _id: 2} },
  {
    $project: {
        date: {
          $dateFromParts: {
              "isoWeekYear": "$isoWeekYear", 
              "isoWeek": "$isoWeek", 
              "isoDayOfWeek": "$isoDayOfWeek", 
              "hour": "$hour", 
              "minute": "$minute", 
              "second": "$second", 
              "millisecond": "$millisecond", 
              "timezone": "$timezone"
          }
        }
    }
  }
])

Hasil:

{ "_id" : 2, "date" : ISODate("2021-08-15T23:30:25.123Z") } 

Bidang Di Luar Jangkauan

Mulai di MongoDB 4.4, rentang nilai yang didukung untuk year dan isoWeekYear adalah 1-9999 . Di versi sebelumnya, batas bawah untuk nilai ini adalah 0 dan rentang nilai yang didukung adalah 0-9999 .

Mulai di MongoDB 4.0, jika nilai ditentukan untuk bidang selain year , isoWeekYear , dan timezone berada di luar rentang yang valid, $dateFromParts operator membawa atau mengurangi perbedaan dari bagian tanggal lain untuk menghitung tanggal.

Nilai Lebih Tinggi dari Rentang

Misalkan kita menambahkan dokumen berikut ke koleksi kita:

{
	"_id" : 3,
	"year" : 2020,
	"month" : 14,
	"day" : 65,
	"hour" : 48,
	"minute" : 130,
	"second" : 625,
	"millisecond" : 123
}

Banyak bidang tanggal dan waktu dalam dokumen ini lebih tinggi dari rentang validnya masing-masing.

Mari kita jalankan perintah berikut untuk mengubahnya menjadi objek Tanggal:

db.dateParts.aggregate([
  { $match: { _id: 3} },
  {
    $project: {
        date: {
          $dateFromParts: {
              "year": "$year", 
              "month": "$month", 
              "day": "$day", 
              "hour": "$hour", 
              "minute": "$minute", 
              "second": "$second", 
              "millisecond": "$millisecond"
          }
        }
    }
  }
])

Hasil:

{ "_id" : 3, "date" : ISODate("2021-04-08T02:20:25.123Z") }

Kita dapat melihat bahwa bagian tanggal dalam objek Tanggal yang dihasilkan berbeda dengan bagian tanggal masing-masing dalam dokumen. Ini karena $dateFromParts menghitung ulang tanggal untuk memperhitungkan nilai bagian tanggal yang melebihi rentang normalnya.

Nilai Lebih Rendah dari Rentang

Misalkan kita menambahkan dokumen berikut ke koleksi kita:

{
	"_id" : 4,
	"year" : 2020,
	"month" : 0,
	"day" : 0,
	"hour" : 0,
	"minute" : 0,
	"second" : 0,
	"millisecond" : 0
}

Banyak bidang tanggal dan waktu dalam dokumen ini lebih rendah dari rentang validnya masing-masing.

Mari kita jalankan perintah berikut untuk mengubahnya menjadi objek Date:

db.dateParts.aggregate([
  { $match: { _id: 4} },
  {
    $project: {
        date: {
          $dateFromParts: {
              "year": "$year", 
              "month": "$month", 
              "day": "$day", 
              "hour": "$hour", 
              "minute": "$minute", 
              "second": "$second", 
              "millisecond": "$millisecond"
          }
        }
    }
  }
])

Hasil:

{ "_id" : 4, "date" : ISODate("2019-11-30T00:00:00Z") }

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Transaksi Di MongoDB

  2. MongoDB yang Dihosting Sendiri

  3. Memantau Server Percona untuk MongoDB - Metrik Utama

  4. Apa saja perintah dasar MongoDB dan bagaimana cara menggunakannya?

  5. Cara Memformat Tanggal di MongoDB