Trong MongoDB, $toDate
toán tử tổng hợp chuyển đổi một giá trị thành một ngày
$toDate
nhận bất kỳ biểu thức hợp lệ nào. Nếu không thể chuyển đổi biểu thức thành ngày tháng, nó sẽ trả về một lỗi. Nếu biểu thức là null
hoặc bị thiếu, nó trả về null
.
Ví dụ
Giả sử chúng ta có một bộ sưu tập được gọi là samples
với tài liệu sau:
{ "_id" : ObjectId("60066f1cc8eb4369cf6ad9c9"), "double" : 1613372035500.75, "decimal" : NumberDecimal("1613372035500.75"), "long" : NumberLong("1613372035500"), "string" : "2021-02-15 06:53:55" }
Chúng tôi có thể sử dụng truy vấn sau để trả về từng giá trị đó dưới dạng Ngày.
db.samples.aggregate(
[
{
$project:
{
_id: 0,
"ObjectId": { $toDate: "$_id" },
"double": { $toDate: "$double" },
"decimal": { $toDate: "$decimal" },
"long": { $toDate: "$long" },
"string": { $toDate: "$string" }
}
}
]
).pretty()
Kết quả:
{ "ObjectId" : ISODate("2021-01-19T05:33:16Z"), "double" : ISODate("2021-02-15T06:53:55.500Z"), "decimal" : ISODate("2021-02-15T06:53:55.500Z"), "long" : ISODate("2021-02-15T06:53:55.500Z"), "string" : ISODate("2021-02-15T06:53:55Z") }
Như mong đợi, tất cả các trường được trả về với các giá trị tương ứng của chúng được chuyển đổi thành giá trị Ngày.
Bạn có thể nhận thấy rằng trường ObjectId trả về một ngày khác với những trường khác. Điều này là do _id
giá trị của trường phản ánh ngày tài liệu được tạo, trong khi các ngày khác chỉ là ngày tùy ý do tôi tạo. Tìm hiểu thêm về ObjectId bên dưới.
Loại đầu vào
$toDate
toán tử chấp nhận các kiểu đầu vào sau:
- Nhân đôi
- Số thập phân
- Dài
- Chuỗi (phải là một chuỗi ngày hợp lệ)
- ObjectId
Tìm hiểu thêm về những điều này bên dưới.
Loại số
Khi sử dụng các kiểu số (Đôi, Thập phân và Dài), $toDate
trả về một ngày tương ứng với số mili giây được đại diện bởi giá trị. Đối với Double và Decimal, đây là giá trị bị cắt ngắn. $toDate
toán tử diễn giải các giá trị số như sau:
- Giá trị dương tương ứng với số mili giây kể từ ngày 1 tháng 1 năm 1970.
- Giá trị âm tương ứng với số mili giây trước ngày 1 tháng 1 năm 1970.
Các loại chuỗi
Khi sử dụng kiểu chuỗi, chuỗi phải là chuỗi ngày hợp lệ. Ví dụ:
-
"2021-02-15"
-
"15 February 2021"
-
"2021-02-15 06:53:55"
-
"2021-02-15 06:53:55+1100"
Bạn không thể sử dụng các ngày không đầy đủ hoặc các giá trị không hợp lệ, chẳng hạn như "Monday"
, "March"
, "2020"
, v.v.
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.
$toDate
toán tử trả về phần dấu thời gian dưới dạng Ngày.