MongoDB collection data with multiple arrays:
{
"_id": ObjectId("61aa6bf1742b00f59b894eb7"),
"first": ["abc", "def", "ghi"],
"last": ["rst", "uvw", "xyz"],
"numb": ["12", "34", "56"]
}
Expected output where the data in the arrays should be in this format:
{
"first": "abc",
"last": "rst",
"numb": "12"
},
{
"first": "def",
"last": "uvw",
"numb": "34"
},
{
"first": "ghi",
"last": "xyz",
"numb": "56"
}
You can make use of
$zipto "transpose" multiple arrays (as many as you'd like actually):This:
zips the 3 arrays such that elements at the same index will get grouped into the same sub-array.$unwinds (explodes/flattens) those sub-arrays.transforms the resulting arrays into objects to fit your expected output format:
$zipping (again!) the keys we want to associate with the array's values (the keys:["first", "last", "numb"]and the values:"$x")$replaceWiththe current document with the result of the$zip.Note that prior to Mongo
4.2, you can use$replaceRootinstead of$replaceWith.