Cân nhắc chạy một đường dẫn tổng hợp sẽ cho phép bạn làm phẳng danh sách dữ liệu trước, chiếu trường mới bằng cách sử dụng $dateToString
, sau đó tập hợp lại các tài liệu đã làm phẳng để có được kết quả mong muốn của bạn.
Những điều trên có thể được thể hiện trong ba đường ống riêng biệt:
db.users.aggregate([
{ "$match": { "username": "xyz" } },
{ "$unwind": "$followers" },
{
"$project": {
"username": 1,
"count": "$followers.count",
"date": { "$dateToString": { "format": "%Y-%m-%d", "date": "$followers.ts" } }
}
},
{
"$group": {
"_id": "$_id",
"username": { "$first": "$username" },
"followers": { "$push": {
"count": "$count",
"date": "$date"
}}
}
}
])
Với MongoDB 3.4 và mới hơn, bạn có thể sử dụng $addFields
bước đường dẫn cùng với $map
để tạo trường mảng mà không cần rút lại và nhóm:
db.users.aggregate([
{ "$match": { "username": "xyz" } },
{
"$addFields": {
"followers": {
"$map": {
"input": "$followers",
"as": "follower",
"in": {
"count": "$$follower.count",
"date": {
"$dateToString": {
"format": "%Y-%m-%d",
"date": "$$follower.ts"
}
}
}
}
}
}
}
])