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

5 Cara Mendapatkan Jam dari Tanggal di MongoDB

MongoDB menyediakan berbagai operator pipeline agregasi yang baik untuk bekerja dengan tanggal, termasuk operator yang mengekstrak bagian tertentu dari tanggal, seperti tahun, bulan, hari, jam, menit, dll.

Ada juga beberapa metode MongoDB yang memungkinkan Anda untuk beralih melalui kursor, dan menerapkan fungsi JavaScript. Karena itu Anda dapat menggunakan JavaScript untuk mengekstrak nilai tanggal dan bagian tanggal, dll dari bidang sesuai kebutuhan.

Artikel ini menyajikan 5 cara untuk mengembalikan porsi jam dari objek Date di MongoDB.

Contoh Data

Misalkan kita memiliki koleksi yang disebut cats dengan dokumen sebagai berikut:

{ "_id" : 1, "name" : "Scratch", "born" : ISODate("2021-01-03T23:30:15.123Z") }
{ "_id" : 2, "name" : "Meow", "born" : ISODate("2019-12-08T04:00:12Z") }
{ "_id" : 3, "name" : "Fluffy", "born" : ISODate("2020-09-24T10:30:00Z") }

Contoh berikut menunjukkan berbagai opsi untuk mengembalikan porsi jam dari born bidang dokumen tersebut.

$hour Operator

$hour operator secara khusus dirancang untuk mengembalikan dokumen dengan porsi jam dari tanggal tertentu.

Kita dapat menjalankan kode berikut untuk mengembalikan porsi jam dari born bidang dalam dokumen di atas.

db.cats.aggregate(
  [
    {
      $project:
        {
          _id: 0,
          birthHour: { $hour: "$born" }
        }
    }
  ]
)

Hasil:

{ "birthHour" : 23 }
{ "birthHour" : 4 }
{ "birthHour" : 10 }

Anda juga dapat menentukan zona waktu saat menggunakan $hour operator.

Lihat MongoDB $hour untuk informasi dan contoh lebih lanjut.

$dateToString Operator

$dateToString operator mengonversi objek tanggal menjadi string menurut format yang ditentukan pengguna. Oleh karena itu, pengguna dapat menentukan bahwa hanya bagian jam yang dikembalikan jika diperlukan.

Ada penentu format untuk setiap bagian tanggal. %H penentu format mengembalikan jam.

Contoh:

db.cats.aggregate(
   [
     {
       $project: {
         _id: 0,
          birthHour: { $dateToString: { format: "%H", date: "$born" } }
       }
     }
   ]
)

Hasil:

{ "birthHour" : "23" }
{ "birthHour" : "04" }
{ "birthHour" : "10" }

Kami dapat menyediakan lebih banyak penentu format untuk menyertakan bagian tanggal dalam hasil, tetapi karena kami hanya tertarik untuk mengekstrak jam dalam artikel ini, kami hanya menggunakan satu penentu format.

Lihat MongoDB $dateToString untuk informasi dan contoh lebih lanjut.

$dateToParts Operator

$dateToParts operator mengembalikan dokumen yang berisi bagian konstituen dari nilai Tanggal BSON yang diberikan sebagai properti individual. Properti yang dikembalikan adalah year , month , day , hour , minute , second dan millisecond .

Oleh karena itu, kami dapat menggunakan $dateToParts dalam satu tahap saluran, lalu tambahkan tahap saluran lain yang mengekstrak hour bagian.

Ini dia $dateToParts pengembalian untuk tiga dokumen kami:

db.cats.aggregate(
  [
    {
      $project:
        {
          _id: 0,
          dateParts: { $dateToParts: { date: "$born" } }
        }
    }
  ]
).pretty()

Hasil:

{
	"dateParts" : {
		"year" : 2021,
		"month" : 1,
		"day" : 3,
		"hour" : 23,
		"minute" : 30,
		"second" : 15,
		"millisecond" : 123
	}
}
{
	"dateParts" : {
		"year" : 2019,
		"month" : 12,
		"day" : 8,
		"hour" : 4,
		"minute" : 0,
		"second" : 12,
		"millisecond" : 0
	}
}
{
	"dateParts" : {
		"year" : 2020,
		"month" : 9,
		"day" : 24,
		"hour" : 10,
		"minute" : 30,
		"second" : 0,
		"millisecond" : 0
	}
}

Hasil ini kemudian dapat diteruskan ke tahap berikutnya dalam pipeline untuk mengekstrak hour lapangan.

Inilah yang terjadi jika kita menambahkan proyeksi lain hanya untuk hour bidang:

db.cats.aggregate(
  [
    {
      $project:
        {
          _id: 0,
          dateParts: { $dateToParts: { date: "$born" } }
        }
    },
    {
      $project:
        {
          birthHour: "$dateParts.hour"
        }
    }
  ]
)

Hasil:

{ "birthHour" : 23 }
{ "birthHour" : 4 }
{ "birthHour" : 10 }

Intinya di sini adalah, jika Anda menggunakan $dateToParts di saluran Anda, Anda secara otomatis memiliki akses ke bagian jam (dan semua bagian lainnya) di tahap berikutnya.

Lihat MongoDB $dateToParts untuk informasi dan contoh lebih lanjut.

The forEach() Metode

Anda dapat menggunakan cursor.forEach() untuk beralih melalui kursor, menggunakan metode JavaScript seperti getHours() atau getUTCHours() untuk mengembalikan nilai jam saja.

db.cats.find().forEach(
  function(c) {
    print(
      c.born.getUTCHours()
      );
  }
);

Hasil:

23
4
10

getUTCHours() Metode JavaScript mengembalikan bilangan bulat, antara 0 dan 23, yang mewakili jam pada tanggal yang ditentukan menurut waktu universal.

Anda mungkin juga memperhatikan bahwa opsi sebelumnya mengembalikan seluruh dokumen yang berisi pasangan nama/nilai, sedangkan opsi ini hanya mengembalikan nilai jam aktual, dan bukan seluruh dokumen.

map() Metode

cursor.map() metode menerapkan fungsi ke setiap dokumen yang dikunjungi oleh kursor dan menggabungkan nilai ke dalam array.

Contoh:

db.cats.find().map(
  function(c) {
    c = c.born.getHours();
    return c;
  }
);

Hasil:

[ 9, 14, 20 ]

Anda mungkin telah memperhatikan bahwa jam yang dihasilkan berbeda dengan contoh sebelumnya. Itu karena dalam contoh ini saya menggunakan getHours() metode JavaScript. Metode ini mengembalikan hasilnya sesuai dengan waktu setempat. Saya bisa dengan mudah menggunakan getUTCHours() .


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB tidak dapat menemukan direktori data setelah memutakhirkan ke Mac OS 10.15 (Catalina)

  2. Fungsi kustom menghitung kolom proyeksi mongodb

  3. MongoDB $trim

  4. Tambahkan Leading Zeros di SQL

  5. Bagaimana cara mendapatkan ukuran dokumen tunggal di Mongodb?