Bài viết này trình bày 5 cách để trả về phần phút từ đối tượng Date trong MongoDB.
Dữ liệu mẫu
Giả sử chúng ta có một bộ sưu tập có tên là cats
với các tài liệu sau:
{ "_id" : 1, "name" : "Scratch", "born" : ISODate("2021-01-03T23:30:15.123Z") } { "_id" : 2, "name" : "Meow", "born" : ISODate("2019-12-08T04:00:47Z") } { "_id" : 3, "name" : "Fluffy", "born" : ISODate("2020-09-24T10:45:00Z") }
Các ví dụ sau đây cho thấy các tùy chọn khác nhau để trả lại phần phút từ born
lĩnh vực của các tài liệu đó.
$minute
Nhà điều hành
$minute
toán tử được thiết kế đặc biệt để trả lại tài liệu với phần phút của một ngày nhất định.
Chúng ta có thể chạy đoạn mã sau để trả về phần phút từ born
trong tài liệu trên.
db.cats.aggregate(
[
{
$project:
{
_id: 0,
birthMinute: { $minute: "$born" }
}
}
]
)
Kết quả:
{ "birthMinute" : 30 } { "birthMinute" : 0 } { "birthMinute" : 45 }
Bạn cũng có thể chỉ định múi giờ khi sử dụng $minute
nhà điều hành.
Xem MongoDB $minute
để biết thêm thông tin và ví dụ.
$dateToString
Nhà điều hành
$dateToString
toán tử chuyển đổi một đối tượng ngày thành một chuỗi theo định dạng do người dùng chỉ định. Do đó, người dùng có thể chỉ định rằng chỉ phần phút được trả lại nếu được yêu cầu.
Có các chỉ định định dạng cho từng phần ngày tháng. %M
định dạng chỉ định trả về phần phút.
Ví dụ:
db.cats.aggregate(
[
{
$project: {
_id: 0,
birthMinute: { $dateToString: { format: "%M", date: "$born" } }
}
}
]
)
Kết quả:
{ "birthMinute" : "30" } { "birthMinute" : "00" } { "birthMinute" : "45" }
Bạn cũng có thể sử dụng %Z
để trả lại số phút bù đắp từ UTC dưới dạng một số.
Xem MongoDB $dateToString
để biết thêm thông tin và ví dụ.
$dateToParts
Nhà điều hành
$dateToParts
toán tử trả về một tài liệu có chứa các phần cấu thành của một giá trị Ngày BSON đã cho dưới dạng các thuộc tính riêng lẻ. Các thuộc tính được trả về là year
, month
, day
, hour
, minute
, second
và millisecond
.
Do đó, chúng tôi có thể sử dụng $dateToParts
trong một giai đoạn đường ống, sau đó thêm một giai đoạn đường ống khác trích xuất minute
một phần.
Đây là những gì $dateToParts
trả lại cho ba tài liệu của chúng tôi:
db.cats.aggregate(
[
{
$project:
{
_id: 0,
dateParts: { $dateToParts: { date: "$born" } }
}
}
]
).pretty()
Kết quả:
{ "dateParts" : { "year" : 2021, "month" : 1, "day" : 3, "hour" : 23, "minute" : 30, "second" : 15, "millisecond" : 123 } } { "dateParts" : { "year" : 2019, "month" : 12, "day" : 8, "hour" : 4, "minute" : 0, "second" : 47, "millisecond" : 0 } } { "dateParts" : { "year" : 2020, "month" : 9, "day" : 24, "hour" : 10, "minute" : 45, "second" : 0, "millisecond" : 0 } }
Sau đó, kết quả này có thể được chuyển sang giai đoạn tiếp theo trong đường dẫn để chỉ trích xuất minute
trường.
Đây là những gì sẽ xảy ra nếu chúng tôi thêm một phép chiếu khác chỉ trong minute
lĩnh vực:
db.cats.aggregate(
[
{
$project:
{
_id: 0,
dateParts: { $dateToParts: { date: "$born" } }
}
},
{
$project:
{
birthMinute: "$dateParts.minute"
}
}
]
)
Kết quả:
{ "birthMinute" : 30 } { "birthMinute" : 0 } { "birthMinute" : 45 }
Vì vậy, nếu bạn sử dụng $dateToParts
trong đường dẫn của bạn, sau đó bạn sẽ có quyền truy cập vào minute
trường (và tất cả các trường khác) trong giai đoạn tiếp theo.
Xem MongoDB $dateToParts
để biết thêm thông tin và ví dụ.
forEach()
Phương pháp
Bạn có thể sử dụng cursor.forEach()
để lặp qua con trỏ, sử dụng phương thức JavaScript như getMinutes()
hoặc getUTCMinutes()
chỉ để trả lại vài phút.
db.cats.find().forEach(
function(c) {
print(
c.born.getUTCMinutes()
);
}
);
Kết quả:
30 0 45
getUTCMinutes()
Phương thức JavaScript trả về một số nguyên, từ 0 đến 59, đại diện cho số phút trong ngày nhất định theo giờ quốc tế.
getMinutes()
phương thức trả về nó theo giờ địa phương.
Bạn cũng có thể nhận thấy rằng các tùy chọn trước đó trả về toàn bộ tài liệu có chứa một cặp tên / giá trị, trong khi tùy chọn này chỉ trả về giá trị phút thực tế chứ không phải toàn bộ tài liệu.
map()
Phương pháp
cursor.map()
phương thức áp dụng một hàm cho mỗi tài liệu được con trỏ truy cập và kết hợp các giá trị thành một mảng.
Ví dụ:
db.cats.find().map(
function(c) {
c = c.born.getUTCMinutes();
return c;
}
);
Kết quả:
[ 30, 0, 45 ]