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

8 Cara Mendapatkan Hari dari Kencan di MongoDB

Saat mengekstrak hari dari sebuah tanggal, opsi yang tepat yang kita gunakan akan bergantung pada bagaimana kita ingin hari itu direpresentasikan.

Misalnya, apakah kita menginginkan hari dalam seminggu, hari dalam sebulan, atau hari dalam setahun? Atau mungkin kita menginginkannya dalam format ISO 8601? Nilai return biasanya akan berbeda tergantung mana yang kita pilih.

Artikel ini mengeksplorasi opsi tersebut, dan karenanya menyajikan 8 cara untuk mengembalikan porsi hari 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 porsi hari dari born bidang dokumen tersebut.

$dayOfWeek Operator

Sesuai dengan namanya, $dayOfWeek operator mengembalikan hari dalam seminggu dari tanggal.

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

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

Hasil:

{ "birthDayOfWeek" : 1 }
{ "birthDayOfWeek" : 1 }
{ "birthDayOfWeek" : 5 }

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

Lihat MongoDB $dayOfWeek untuk informasi dan contoh lebih lanjut.

$dayOfMonth Operator

$dayOfMonth operator mengembalikan hari dalam sebulan dari tanggal.

Contoh:

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

Hasil:

{ "birthDayOfMonth" : 3 }
{ "birthDayOfMonth" : 8 }
{ "birthDayOfMonth" : 24 }

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

Lihat MongoDB $dayOfMonth untuk informasi dan contoh lebih lanjut.

$dayOfYear Operator

Ya, Anda dapat menebaknya. $dayOfYear operator mengembalikan hari dalam setahun dari tanggal.

Contoh:

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

Hasil:

{ "birthDayOfYear" : 3 }
{ "birthDayOfYear" : 342 }
{ "birthDayOfYear" : 268 }

$dayOfYear operator juga menerima parameter zona waktu.

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

Ada penentu format untuk setiap bagian tanggal, dan jika menyangkut porsi hari, Anda memiliki pilihan penentu format yang akan bergantung pada apakah Anda ingin mengembalikan hari dalam seminggu, hari dalam sebulan, hari dalam setahun, atau hari dalam seminggu dalam format ISO 8601.

Contoh:

db.cats.aggregate(
   [
     {
       $project: {
         _id: 0,
          birthDayOfWeek: { $dateToString: { format: "%w", date: "$born" } },
          birthDayOfMonth: { $dateToString: { format: "%d", date: "$born" } },
          birthDayOfYear: { $dateToString: { format: "%j", date: "$born" } },
          birthDayOfWeekISO: { $dateToString: { format: "%u", date: "$born" } }
       }
     }
   ]
).pretty()

Hasil:

{
	"birthDayOfWeek" : "1",
	"birthDayOfMonth" : "03",
	"birthDayOfYear" : "003",
	"birthDayOfWeekISO" : "7"
}
{
	"birthDayOfWeek" : "1",
	"birthDayOfMonth" : "08",
	"birthDayOfYear" : "342",
	"birthDayOfWeekISO" : "7"
}
{
	"birthDayOfWeek" : "5",
	"birthDayOfMonth" : "24",
	"birthDayOfYear" : "268",
	"birthDayOfWeekISO" : "4"
}

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

Lihat MongoDB $dateToString untuk informasi dan contoh lebih lanjut.

Lihat juga MongoDB $dateToString Penentu Format untuk daftar penentu format yang dapat Anda gunakan dengan $dateToString .

$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 day bagian jika diperlukan.

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 pipeline untuk mengekstrak day lapangan.

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

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

Hasil:

{ "birthDay" : 3 }
{ "birthDay" : 8 }
{ "birthDay" : 24 }

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

Perlu juga disebutkan bahwa $dateToParts 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 untuk mengembalikan nilai hari saja.

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

Hasil:

1
0
4

Dalam hal ini, kami menggunakan JavaScript getDay() metode, yang mengembalikan bilangan bulat, antara 0 dan 6, sesuai dengan hari dalam seminggu untuk tanggal yang ditentukan, menurut waktu setempat.

Pilihan lainnya adalah dengan menggunakan getUTCDay() metode yang menggunakan waktu universal. Kami akan menggunakan metode ini dalam contoh berikutnya.

Atau, kita bisa menggunakan JavaScript getDate() metode, yang mengembalikan bilangan bulat, antara 1 dan 31, yang mewakili hari dalam sebulan untuk tanggal yang ditentukan.

Juga, opsi ini hanya mengembalikan nilai hari yang sebenarnya, dan bukan keseluruhan dokumen, seperti pada contoh sebelumnya.

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.getUTCDay();
    return c;
  }
);

Hasil:

[ 0, 0, 4 ]

Seperti disebutkan, JavaScript getUTCDay() metode mengembalikan hasilnya menggunakan waktu universal. Dalam hal ini, ini menghasilkan nilai berbeda yang dikembalikan untuk dokumen pertama (kami mendapatkan 0 dalam contoh ini, versus 1 di yang sebelumnya).

$isoDayOfWeek Operator

Jika Anda perlu mengembalikan hari dalam seminggu dalam format ISO 8601, Anda dapat menggunakan $isoDayOfWeek . Tahun ISO 8601 dimulai dengan hari Senin minggu 1 dan berakhir dengan hari Minggu minggu terakhir.

Contoh:

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

Hasil:

{ "birthIsoDayOfWeek" : 7 }
{ "birthIsoDayOfWeek" : 7 }
{ "birthIsoDayOfWeek" : 4 }

Dalam hal ini kami mendapatkan hasil yang sama sekali berbeda dari yang kami dapatkan saat menggunakan $dayOfWeek operator, karena cara ISO 8601 menghitung tanggal.

Berikut adalah contoh yang menunjukkan perbedaan ini:

db.cats.aggregate(
  [
    {
      $project:
        {
          _id: 0,
          birthDayOfWeek: { $dayOfWeek: "$born" },
          birthIsoDayOfWeek: { $isoDayOfWeek: "$born" }
        }
    }
  ]
)

Hasil:

{ "birthDayOfWeek" : 1, "birthIsoDayOfWeek" : 7 }
{ "birthDayOfWeek" : 1, "birthIsoDayOfWeek" : 7 }
{ "birthDayOfWeek" : 5, "birthIsoDayOfWeek" : 4 }

  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. DBaaS Hosting MongoDB Pertama yang Mendukung Pemerintah Azure untuk Sektor Publik

  2. Gabungkan dua kueri OR dengan AND di Mongoose

  3. Perbedaan antara count() dan find().count() di MongoDB

  4. Kembalikan sejumlah catatan terbatas dari jenis tertentu, tetapi jumlah catatan lain yang tidak terbatas?

  5. cari berdasarkan ObjectId di mongodb dengan pymongo