是否有汇总查询来转换以下内容:
{
"data": [
{
"key": "aaa",
"values": [1,2,3]
},
{
"key": "bbb",
"values": [4,5,6]
}
]
}
到这个结构?
{
"data": [
{
"aaa": "1,2,3"
},
{
"bb": "4,5,6"
}
]
}
我可以在其下搜索聚合命令的一些提示或关键字也很有用......
更新
我使用的是MongoDB 3.4.3,遗憾的是$arrayToObject
无效。所以我猜,问题更为根本:
有没有办法为MongoDB 3.4.3或更低版本设置字段名称通用(根据其他一些值)?
提前多多感谢:)
答案 0 :(得分:2)
要将键和值切换为实际的JSON键/值对,您可以使用MongoDB Aggregation运算符$arrayToObject。
首先,您必须将字段名称key
和value
更改为k
和v
,如下所示:
{
"data": [
{
"k": "aaa",
"v": [1,2,3]
},
{
"k": "bbb",
"v": [4,5,6]
}
]
}
修改文档字段后,您可以使用运算符$arrayToObject
db.collection.aggregate([
{ $project : { data : { $arrayToObject : "$data" }}}
]);
将输出如下:
{
"data": {
"aaa": [1, 2, 3],
"bbb": [4, 5, 6]
}
}
请注意,$arrayToObject
数组聚合运算符在MongoDB v3.4.4 +
有关反向聚合运算符,另请参阅$objectToArray。
如果您还希望将数组[1, 2, 3]
的值转换为"1,2,3"
的单个字符串,则可以使用$concat字符串运算符。
另请参阅手册中的更多聚合Array Operators和String Operators。