我有一个来自API的输出,它被加载到MongoDB,结构如下:
{
"_id": {
"$oid": "654e74b1325312179d479295"
},
"myid": "id123",
"array": [ 7, 98, 2, 35, 76 ],
}
字符串
数组中的每个条目都有一个不同的度量值,度量值由它们在数组中的位置标识。我确实有度量值的名称作为常量,我想将原始数组转换为键/值对。
度量名称是:[“val 0”,“val 1”,“val 2”,“val 3”,“val 4”],它们不是API输出的一部分。我从书面文档中得到的。
我有一个Python代码,它可以遍历数组并输出一个新的结构,但我想消除这个额外的步骤,并尝试在没有Python的情况下使用MongoDB。
我希望输出像这样:
“array”:[ {“val0”:7},{“val1”:98},{“val2”:2},{“val3”:35},{“val4”:76} ],
我试图找到一个类似的情况开始,但我无法找到任何。
--更新--
我最接近的是跟踪Converting mongo array to object with key-value pair
我使用了代码:
db.array_test.aggregate([{
$match: {
"myid" : "id123"
}},
{
$unwind: {path : "$array"}},{ $group:{
_id:"$_id",
result:{
$push: {
label: "$array", value: "$array.values"
}
}
}}])
型
我得到了:
[
{
"_id": {
"$oid": "654e74b1325312179d479295"
},
"result": [
{
"label": 7
},
{
"label": 98
},
{
"label": 2
},
{
"label": 35
},
{
"label": 76
}
]
}
]
型
我仍然需要使用度量名称列表而不是“标签”。
1条答案
按热度按时间k3fezbri1#
按照@Joe在comment中给出的想法,你可以使用
$zip
来通过度量和array
中的值来构造对。然后将其转换为一个k-v元组数组,并使用$arrayToObject
转换它。最后使用$merge
更新回集合。字符串
Mongo Playground