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

6 Cara Mendapatkan Tahun dari Tanggal di MongoDB

MongoDB menyediakan beberapa operator pipa agregasi untuk bekerja dengan tanggal. Ini termasuk operator yang mengekstrak bagian tertentu dari tanggal, seperti tahun, bulan, hari, dll.

Ada juga beberapa metode MongoDB yang memungkinkan Anda untuk beralih melalui kursor, dan menerapkan fungsi JavaScript. Oleh karena itu, ini memungkinkan Anda menggunakan JavaScript untuk mengekstrak nilai tanggal dan bagian tanggal, dll dari suatu bidang.

Artikel ini menyajikan 6 cara untuk mengembalikan bagian tahun dari tanggal 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 bagian tahun dari born bidang dokumen tersebut.

$year Operator

$year operator adalah pilihan yang paling jelas untuk mengekstrak bagian tahun dari tanggal. Ini dirancang khusus untuk mengembalikan dokumen dengan bagian tahun dari suatu tanggal.

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

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

Hasil:

{ "birthYear" : 2021 }
{ "birthYear" : 2019 }
{ "birthYear" : 2020 }

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

Lihat MongoDB $year 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 tahun yang dikembalikan jika diperlukan.

Ada penentu format untuk setiap bagian tanggal. %Y penentu format mengembalikan tahun.

Contoh:

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

Hasil:

{ "birthYear" : "2021" }
{ "birthYear" : "2019" }
{ "birthYear" : "2020" }

Kami dapat menyediakan lebih banyak penentu format untuk menyertakan bagian tanggal dalam hasil, tetapi karena kami hanya tertarik untuk mengekstrak tahun 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 .

Berbekal pengetahuan ini, kita dapat menggunakan $dateToParts dalam satu tahap saluran, lalu tambahkan tahap saluran lain yang mengekstrak year 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
	}
}

Data ini dapat diteruskan ke tahap berikutnya dalam alur untuk mengekstrak hanya year lapangan.

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

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

Hasil:

{ "birthYear" : 2021 }
{ "birthYear" : 2019 }
{ "birthYear" : 2020 }

Ini jelas tidak sesingkat menggunakan opsi sebelumnya. Namun, bergantung pada apa yang Anda lakukan di saluran Anda, pendekatan ini bisa menjadi opsi yang berguna.

$dateToParts operator juga menerima iso8601 parameter, yang memodifikasi dokumen keluaran untuk menggunakan bidang tanggal minggu ISO.

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 getFullYear() atau getUTCFullYear() untuk mengembalikan nilai tahun saja.

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

Hasil:

2021
2019
2020

Opsi sebelumnya mengembalikan seluruh dokumen yang berisi pasangan nama/nilai. Opsi ini hanya mengembalikan nilai tahun yang sebenarnya, dan bukan keseluruhan 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.getFullYear();
    return c;
  }
);

Hasil:

[ 2021, 2019, 2020 ]

$isoWeekYear Operator

Jika Anda perlu mengembalikan tahun dalam format ISO 8601, gunakan $isoWeekYear . Tahun ISO 8601 dimulai dengan hari Senin minggu 1 dan berakhir dengan hari Minggu minggu terakhir.

Contoh:

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

Hasil:

{ "birthIsoWeekYear" : NumberLong(2020) }
{ "birthIsoWeekYear" : NumberLong(2019) }
{ "birthIsoWeekYear" : NumberLong(2020) }

Perhatikan bahwa tahun pertama sekarang adalah 2020, bukan 2021 seperti pada contoh sebelumnya. Tidak semua tahun akan berbeda saat menggunakan $isoWeekYear , karena itu tergantung pada tanggal yang bersangkutan.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cara Menggabungkan Dokumen saat Mengimpor File ke MongoDB

  2. Bagaimana Anda memperbarui objek dalam larik dokumen (pembaruan bersarang)

  3. mongodb periksa apakah titik dalam poligon

  4. MongoDB:Apa itu penyatuan koneksi dan batas waktu?

  5. MongoDB $reverseArray