Bắt đầu từ MongoDB 3.4, chúng ta có thể sử dụng $ zip
toán tử để nén các mảng của chúng tôi.
Điều đó đang được nói, chúng tôi không thể nhận được kết quả mong đợi của bạn trừ khi bạn biết độ dài mảng của mình.
db.collection.aggregate( [
{ "$project": {
"zipped": {
"$zip": { "inputs": [ "$A", "$B", "$C" ] }
}
}}
])
nơi sản xuất:
{
"_id" : ObjectId("578f35fb6db61a299a383c5b"),
"zipped" : [
[ "A1", "B1", 100 ],
[ "A2", "B2", 200 ],
[ "A3", "B3", 300 ]
]
}
Nếu tình cờ biết số phần tử trong mỗi mảng con, chúng ta có thể sử dụng $ map
toán tử biến trả về một mảng tài liệu con.
Trong $ map
, chúng ta cần sử dụng $ arrayElemAt
toán tử để đặt giá trị của trường A, B và C.
db.collection.aggregate( [
{ "$project": {
"zipped": {
"$map": {
"input": {
"$zip": { "inputs": [ "$A", "$B", "$C" ] }
},
"as": "el",
"in": {
"A": { "$arrayElemAt": [ "$$el", 0 ] },
"B": { "$arrayElemAt": [ "$$el", 1 ] },
"C": { "$arrayElemAt": [ "$$el", 2 ] }
}
}
}
}}
] )
nơi sản xuất:
{
"_id" : ObjectId("578f35fb6db61a299a383c5b"),
"zipped" : [
{
"A" : "A1",
"B" : "B1",
"C" : 100
},
{
"A" : "A2",
"B" : "B2",
"C" : 200
},
{
"A" : "A3",
"B" : "B3",
"C" : 300
}
]
}