尝试将具有键值对的数组压缩为具有键和该键的所有唯一值的对象数组。
我有这样一个结构:
{
fruits: [
{fruit: apple, type: gaja},
{fruit: apple, type: honey-crisp},
{fruit: apple, type: fuji},
{fruit: cherry, type: black},
{fruit: cherry, type: red},
{fruit: cherry, type: red},
]
}
如何将其转换为:
{
fruits: [
{fruit: apple, types: [gaja, honey-crisp, fuji]},
{fruit: cherry, types: [black, red]}
]
}
使用mongo聚合,我设法使用$group和$addToSet从我的数据中获得第一个结构。不确定如何将数组Map到具有键和值列表的新对象
3条答案
按热度按时间ybzsozfc1#
下面是另一种方法,使用
"$reduce"
。注解在聚合管道中。在mongoplayground.net上试试。
mgdq6dx12#
也许是这样的:
解释:
1.展开阵列
1.组以形成类型数组(如果只需要unique,可以使用$push或$addToSet)
1.投影必要的字段
1.将所有文档分组到单个最终文档中
Playground
nkkqxpd93#
这是另一种方法,使用多个
"$map"
和"$setUnion"
来获得唯一的数组成员。在mongoplayground.net上试试。