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.