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

MongoDB $milidetik

Di MongoDB, $millisecond operator pipa agregasi mengembalikan bagian milidetik dari tanggal sebagai bilangan bulat antara 0 dan 999 .

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

$millisecond 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 milidetik dari born bidang dalam dokumen itu.

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

Hasil:

{ "birthMilliSecond" : 123 }

Di sini, saya menggunakan birthMilliSecond sebagai nama bidang yang akan dikembalikan, tetapi ini bisa berupa apa saja (seperti milliSecondsAtBirth , milliSeconds , 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 $millisecond operator.

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

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

Hasil:

{ "kabul" : 123, "brisbane" : 123 } 

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

Offset UTC

Dalam contoh ini kita menggunakan offset UTC.

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

Hasil:

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

Mengembalikan Milidetik dari ObjectId

Anda dapat menggunakan $millisecond untuk mengembalikan bagian milidetik dari ObjectId.

Nilai ObjectId adalah nilai heksadesimal 12 byte yang terdiri dari:

  • Nilai cap waktu 4 byte, yang 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 $millisecond untuk mengembalikan bagian milidetik dari ObjectId itu.

Namun, seperti yang disebutkan, bagian zona waktu ObjectId hanya diukur dalam detik sejak zaman Unix, dan oleh karena itu, tidak termasuk bagian milidetik.

Contoh:

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

Hasil:

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

Kita dapat melihat bahwa timestamp tidak menyertakan bagian milidetik, dan hasilnya adalah 0 .

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


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bagaimana cara mengubah pymongo.cursor.Cursor menjadi dict?

  2. MongoDB $tahun

  3. Cara Menggunakan Pemodelan Data MongoDB untuk Meningkatkan Operasi Throughput

  4. Cara mengonversi set replika MongoDB ke server yang berdiri sendiri

  5. MongoDB $toString