MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

MongoDB $ mili giây

Trong MongoDB, $millisecond toán tử đường ống tổng hợp trả về phần mili giây của ngày dưới dạng số nguyên giữa 0999 .

Bạn có thể tùy ý chỉ định múi giờ để sử dụng cho kết quả.

$millisecond toán tử chấp nhận một ngày (dưới dạng Ngày, Dấu thời gian hoặc ObjectId) hoặc tài liệu chỉ định ngày và múi giờ để sử dụng.

Ví dụ

Giả sử chúng ta có một bộ sưu tập có tên là pets với tài liệu sau:

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

Chúng ta có thể chạy đoạn mã sau để trích xuất phần mili giây từ born trong tài liệu đó.

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

Kết quả:

{ "birthMilliSecond" : 123 }

Ở đây, tôi đã sử dụng birthMilliSecond là tên trường để trả về, nhưng đây có thể là bất kỳ thứ gì (chẳng hạn như milliSecondsAtBirth , milliSeconds , vân vân).

_id trường được trả về theo mặc định khi sử dụng phép chiếu trong MongoDB, nhưng trong ví dụ này, tôi đã ẩn _id một cách rõ ràng trường sử dụng _id: 0 .

Chỉ định múi giờ

Bạn có thể chỉ định múi giờ để sử dụng cho đầu ra của $millisecond nhà điều hành.

Khi bạn thực hiện việc này, đối số được chuyển đến $millisecond phải có dạng sau:

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

Ở đâu <dateExpression> là ngày sử dụng và <tzExpression> là múi giờ để sử dụng.

Múi giờ có thể được chỉ định bằng cách sử dụng định danh múi giờ Olson (ví dụ:"Europe/London" , "GMT" ) hoặc bù UTC (ví dụ:"+02:30" , "-1030" ).

Mã định danh múi giờ Olson

Dưới đây là một ví dụ xuất ra mili giây ở hai múi giờ khác nhau, mỗi múi giờ sử dụng ID múi giờ Olson:

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

Kết quả:

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

Vì sự thay đổi múi giờ không ảnh hưởng đến phần mili giây nên kết quả vẫn giống nhau.

Chênh lệch UTC

Trong ví dụ này, chúng tôi sử dụng độ lệch 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" }
            }
        }
    }
  ]
)

Kết quả:

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

Trả lại Mili giây từ ObjectId

Bạn có thể sử dụng $millisecond để trả về phần mili giây từ ObjectId.

Giá trị ObjectId là các giá trị thập lục phân 12 byte bao gồm:

  • Giá trị dấu thời gian 4 byte, đại diện cho việc tạo ObjectId, được đo bằng giây kể từ kỷ nguyên Unix.
  • Một 5 byte là một giá trị ngẫu nhiên
  • Bộ đếm tăng 3 byte, được khởi tạo thành giá trị ngẫu nhiên.

Tóm lại, tài liệu của chúng tôi trông giống như sau:

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

Tài liệu này chứa một ObjectId. Do đó, chúng tôi có thể sử dụng $millisecond để trả về phần mili giây từ ObjectId đó.

Tuy nhiên, như đã đề cập, phần múi giờ của ObjectId chỉ được đo bằng giây kể từ kỷ nguyên Unix và do đó, nó không bao gồm phần mili giây.

Ví dụ:

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

Kết quả:

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

Chúng ta có thể thấy rằng dấu thời gian không bao gồm phần mili giây và kết quả là 0 .

Trong trường hợp này, tôi cũng đã sử dụng $toDate toán tử đường ống tổng hợp để trả về phần dấu thời gian của ObjectId.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Tìm kiếm giá trị của bất kỳ trường nào trong MongoDB mà không đặt tên rõ ràng

  2. Làm thế nào để thực hiện hiệu quả việc phân biệt với nhiều khóa?

  3. Không thể kết nối với mongoDB đang chạy trong bộ chứa docker

  4. Tách chuỗi thành một mảng các chuỗi con hoặc ký tự trong MongoDB

  5. Sự khác biệt giữa save và insert trong Mongo DB là gì?