Để format ngày tháng trong mảng object, dùng $map kết hợp $dateToString trong stage $project của aggregate.
Dữ liệu mẫu
> db.demo104.insertOne({
"AppName" : "Online Book",
"Details" : [
{ "ClientName" : "Chris", "Deadline" : new ISODate("2020-03-10") }
]
});
{ "acknowledged" : true, "insertedId" : ObjectId("5e2ed7fd9fd5fd66da21446f") }
Pipeline aggregate
> db.demo104.aggregate([
{ "$match": {} },
{ "$project": {
"title": 1,
"Details": {
"$map": {
"input": "$Details",
"as": "out",
"in": {
"ClientName": "$$out.ClientName",
"Deadline": {
"$dateToString": { "format": "%m", "date": "$$out.Deadline" }
}
}
}
}
}}
]);
Kết quả
{ "_id" : ObjectId("5e2ed7fd9fd5fd66da21446f"), "Details" : [ { "ClientName" : "Chris", "Deadline" : "03" } ] }
Giải thích:
$map: Biến đổi từng phần tử của mảngDetails$$out: Biến tham chiếu phần tử hiện tại trong $map$dateToString: Format date theoformat(định dạng strftime): %Y-%m-%d, %H:%M:%S, %m (tháng), %d (ngày)...- Kết quả: Chỉ giữ tháng "03" từ 2020-03-10
Các format phổ biến: %Y-%m-%d (2020-03-10), %Y-%m-%dT%H:%M:%S.%LZ (ISO string), %d/%m/%Y (10/03/2020).