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

MongoDB $minggu

Di MongoDB, $week operator pipa agregasi mengembalikan minggu dalam setahun untuk tanggal sebagai angka antara 0 dan 53 .

Saat menggunakan $week operator, Anda dapat secara opsional menentukan zona waktu yang akan digunakan untuk hasil.

$week operator menerima baik tanggal (baik sebagai Tanggal, Timestamp, atau ObjectId), atau dokumen yang menentukan tanggal dan zona waktu untuk digunakan.

Contoh

Misalkan kita memiliki koleksi yang disebut pets dengan dokumen berikut:

{
	"_id" : ObjectId("600631c7c8eb4369cf6ad9c8"),
	"name" : "Fetch",
	"born" : ISODate("2020-12-31T23:30:15.123Z")
}

Kita dapat menjalankan kode berikut untuk mengembalikan minggu dalam setahun dari born bidang dalam dokumen itu.

db.pets.aggregate(
  [
    {
      $project:
        {
          _id: 0,
          birthWeek: { $week: "$born" }
        }
    }
  ]
)

Hasil:

{ "birthWeek" : 52 } 

Kita dapat melihat bahwa minggu itu adalah 52.

Di sini, saya menggunakan birthWeek sebagai nama bidang yang akan ditampilkan, tetapi ini bisa berupa apa saja (seperti weekBorn , week , dll).

_id bidang dikembalikan secara default saat menggunakan proyeksi di MongoDB, tetapi dalam contoh ini saya secara eksplisit menyembunyikan _id kolom menggunakan _id: 0 .

Tentukan Zona Waktu

Anda dapat menentukan zona waktu yang akan digunakan untuk output $week operator.

Ketika Anda melakukan ini, argumen diteruskan ke $week harus dalam bentuk berikut:

{ date: <dateExpression>, timezone: <tzExpression> }

Dimana <dateExpression> adalah tanggal untuk digunakan, dan <tzExpression> adalah zona waktu yang digunakan.

Zona waktu dapat ditentukan menggunakan pengidentifikasi zona waktu Olson (mis. "Europe/London" , "GMT" ) atau offset UTC (mis. "+02:30" , "-1030" ).

Identifier Zona Waktu Olson

Berikut adalah contoh yang menampilkan minggu dalam dua zona waktu berbeda, masing-masing menggunakan ID zona waktu Olson:

db.pets.aggregate(
  [
    {
      $project: {
          _id: 0,
          honolulu: { 
            $week: { date: "$born", timezone: "Pacific/Honolulu" }
            },
          auckland: { 
            $week: { date: "$born", timezone: "Pacific/Auckland" }
            }
        }
    }
  ]
)

Hasil:

{ "honolulu" : 52, "auckland" : 0 } 

Dalam hal ini, tanggal bergerak maju ke tahun/minggu berikutnya saat menggunakan Pacific/Auckland zona waktu.

Offset UTC

Ini contoh yang sama, kecuali kali ini kita menggunakan offset UTC.

db.pets.aggregate(
  [
    {
      $project: {
          _id: 0,
          "utcOffset-1000": { 
            $week: { date: "$born", timezone: "-1000" }
            },
          "utcOffset+1200": { 
            $week: { date: "$born", timezone: "+1200" }
            }
        }
    }
  ]
)

Hasil:

{ "utcOffset-1000" : 52, "utcOffset+1200" : 0 } 

Kembalikan Minggu dari ObjectId

Anda dapat menggunakan $week untuk mengembalikan bagian minggu dari ObjectId.

Nilai ObjectId adalah nilai heksadesimal 12 byte yang terdiri dari:

  • Nilai cap waktu 4 byte, mewakili pembuatan ObjectId, diukur dalam detik sejak zaman Unix.
  • 5 byte adalah nilai acak
  • Penghitung pertambahan 3 byte, diinisialisasi ke nilai acak.

Untuk rekap, dokumen kami terlihat seperti ini:

{
	"_id" : ObjectId("600631c7c8eb4369cf6ad9c8"),
	"name" : "Fetch",
	"born" : ISODate("2020-12-31T23:30:15.123Z")
}

Dokumen ini berisi ObjectId. Oleh karena itu, kita dapat menggunakan $week untuk mengembalikan minggu saat dokumen kita dibuat (atau lebih khusus lagi, saat _id nilai ObjectId bidang telah dibuat).

Contoh:

db.pets.aggregate(
  [
    {
      $project:
        {
          "timeStamp": { $toDate: "$_id"},
          "week": { $week: "$_id" }
        }
    }
  ]
).pretty()

Hasil:

{
	"_id" : ObjectId("600631c7c8eb4369cf6ad9c8"),
	"timeStamp" : ISODate("2021-01-19T01:11:35Z"),
	"week" : 3
}

Kita dapat melihat bahwa dokumen itu dibuat pada minggu ke-3 tahun ini.

Dalam hal ini, saya juga menggunakan $toDate operator pipeline agregasi untuk mengembalikan bagian stempel waktu ObjectId.

Minggu ISO

Anda juga dapat menggunakan $isoWeek operator untuk mengembalikan nomor minggu dalam format ISO 8601, mulai dari 1 ke 53 .


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Gabungkan dua kueri OR dengan AND di Mongoose

  2. Bagaimana cara mendapatkan ukuran dokumen tunggal di Mongodb?

  3. mongodb :Meningkatkan koneksi maksimal di mongodb

  4. Penomoran data mongo musim semi

  5. Menghubungkan ke MongoDB Atlas menggunakan Golang mgo:Persistent no reachable server to replika set