MongoDB menyediakan sejumlah operator pipeline agregasi untuk bekerja dengan tanggal, 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. 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 bagian bulan 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 bulan dari born
bidang dokumen tersebut.
$month
Operator
$month
operator secara khusus dirancang untuk mengembalikan dokumen dengan porsi bulan dari tanggal tertentu.
Kita dapat menjalankan kode berikut untuk mengembalikan bulan dari born
bidang dalam dokumen di atas.
db.cats.aggregate(
[
{
$project:
{
_id: 0,
birthMonth: { $month: "$born" }
}
}
]
)
Hasil:
{ "birthMonth" : 1 } { "birthMonth" : 12 } { "birthMonth" : 9 }
Anda juga dapat menentukan zona waktu saat menggunakan $month
operator.
Lihat MongoDB $month
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 bulan yang dikembalikan jika diperlukan.
Ada penentu format untuk setiap bagian tanggal. %m
penentu format mengembalikan bulan.
Contoh:
db.cats.aggregate(
[
{
$project: {
_id: 0,
birthMonth: { $dateToString: { format: "%m", date: "$born" } }
}
}
]
)
Hasil:
{ "birthMonth" : "01" } { "birthMonth" : "12" } { "birthMonth" : "09" }
Kami dapat menyediakan lebih banyak penentu format untuk menyertakan bagian tanggal dalam hasil, tetapi karena kami hanya tertarik untuk mengekstrak bulan 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 month
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 hanya month
lapangan.
Inilah yang terjadi jika kita menambahkan proyeksi lain hanya untuk month
bidang:
db.cats.aggregate(
[
{
$project:
{
_id: 0,
dateParts: { $dateToParts: { date: "$born" } }
}
},
{
$project:
{
birthMonth: "$dateParts.month"
}
}
]
)
Hasil:
{ "birthMonth" : 1 } { "birthMonth" : 12 } { "birthMonth" : 9 }
Ini jelas tidak sesingkat menggunakan opsi sebelumnya. Namun, bergantung pada apa yang Anda lakukan di jalur Anda, pendekatan ini mungkin sesuai dengan tagihan.
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 getMonth()
atau getUTCMonth()
untuk mengembalikan nilai bulan saja.
db.cats.find().forEach(
function(c) {
print(
c.born.getMonth()
);
}
);
Hasil:
0 11 8
Perhatikan bahwa getMonth()
Metode JavaScript mengembalikan nomor bulan sebagai bilangan bulat, antara 0 dan 11.
Anda mungkin juga memperhatikan bahwa opsi sebelumnya mengembalikan seluruh dokumen yang berisi pasangan nama/nilai, sedangkan opsi ini hanya mengembalikan nilai bulan yang sebenarnya, 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.getMonth();
return c;
}
);
Hasil:
[ 0, 11, 8 ]
Sekali lagi, kita mendapatkan bulan sebagai bilangan bulat antara 0 dan 11.