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

MongoDB $detik

Di MongoDB, $second operator pipa agregasi mengembalikan bagian kedua dari tanggal sebagai angka antara 0 dan 59 . Nilainya juga bisa 60 untuk memperhitungkan detik kabisat kapan pun berlaku.

Anda dapat secara opsional menentukan zona waktu yang akan digunakan untuk hasil.

$second 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 mengekstrak bagian kedua dari kode born bidang dalam dokumen itu.

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

Hasil:

{ "birthSecond" : 15 }

Di sini, saya menggunakan birthSecond sebagai nama bidang yang akan dikembalikan, tetapi ini bisa berupa apa saja (seperti secondsAtBirth , seconds , 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 $second operator.

Saat Anda melakukan ini, argumen diteruskan ke $second 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 detik dalam dua zona waktu yang berbeda, masing-masing menggunakan ID zona waktu Olson:

db.pets.aggregate(
  [
    {
      $project: {
          _id: 0,
          kabul: { 
            $second: { date: "$born", timezone: "Asia/Kabul" }
            },
          brisbane: { 
            $second: { date: "$born", timezone: "Australia/Brisbane" }
            }
        }
    }
  ]
)

Hasil:

{ "kabul" : 15, "brisbane" : 15 } 

Melihat perubahan zona waktu tidak mempengaruhi porsi detik, hasilnya tetap sama.

Offset UTC

Dalam contoh ini kita menggunakan offset UTC.

db.pets.aggregate(
  [
    {
      $project: {
          _id: 0,
          "utcOffset+04:30": { 
            $second: { date: "$born", timezone: "+04:30" }
            },
          "utcOffset+05:45": { 
            $second: { date: "$born", timezone: "+05:45" }
            }
        }
    }
  ]
)

Hasil:

{ "utcOffset+04:30" : 15, "utcOffset+05:45" : 15 }

Mengembalikan Detik dari ObjectId

Anda dapat menggunakan $second untuk mengembalikan bagian detik 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 $second untuk mengembalikan detik saat dokumen kita dibuat (atau lebih khusus lagi, ketika _id nilai ObjectId bidang telah dibuat).

Contoh:

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

Hasil:

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

Kita dapat melihat bahwa dokumen itu dibuat pada detik ke-35 (menit ke-11 dari jam ke-1 hari itu).

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


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Di mongoDb, bagaimana Anda menghapus elemen array dengan indeksnya?

  2. Saya mencoba menjalankan server mongod di ubuntu:pengecualian di initAndListen:29 Direktori data /data/db tidak ditemukan., terminasi

  3. MongoDB menyisipkan float ketika mencoba memasukkan integer

  4. Urutan kenaikan otomatis di mongodb menggunakan Java

  5. Masukkan kriteria pencocokan Elemen Array dalam dokumen MongoDB?