【问题标题】:Loop over object distionary with no keys from MySQL在没有来自 MySQL 的键的情况下循环对象字典
【发布时间】:2021-03-13 09:11:37
【问题描述】:

创建表:

CREATE TABLE comprehensive_risk_summary (
    set_id BINARY(16) PRIMARY KEY NOT NULL,
    calculation_time DATETIME NOT NULL,
    label VARCHAR(50) NOT NULL,
    critical_count VARCHAR(60) NOT NULL,
    median_risk VARCHAR(60)
);

插入数据的SQL表为:

INSERT INTO comp_risk VALUES (
    UNHEX(REPLACE("5a9dbfca-74d6-471a-af27-31beb4b53bb2", "-","")),
    "NOW()"
    "{5/27/20, Apr. 2020, Aug 2019, Dec 2019}",
    "{2, 4, 5, 4}",
    "{1.05, 1.25, 1.07, 1.13}"
);

查询此表select * from comp_risk,响应如下:

"data": {
            "patient_set_id": "5a9dbfca-74d6-471a-af27-31beb4b53bb2",
            "calculation_time": "2020-12-01 11:57:34",
            "label": "{5/27/20, Apr. 2020, Aug 2019, Dec 2019}",
            "critical_count": "{2, 4, 5, 4}",
            "median_risk": "{1.05, 1.25, 1.07, 1.13}"
        }

我需要如下格式的最终​​数据:

{
    "set_id": "5a9dbfca-74d6-471a-af27-31beb4b53bb2",
    "calculation_time": "2020-12-01 11:57:34",
    "internals" : [
             {  "label" : "5/27/20",
                "cat4_cnt": {
                  "count": 2
                },
                "median": 1.05
             },
             {  "label" : "Apr. 2019",
                "cat4_cnt": {
                  "count": 4
                },
                "median": 1.25
             },
             {  "label" : "Aug. 2019",
                "cat4_cnt": {
                  "count": 5
                },
                "median": 1.07
             },
             {  "label" : "Dec. 2019",
                "cat4_cnt": {
                  "count": 4
                },
                "median": 1.13
             }];
  }

我无法弄清楚如何实现相同的功能,因为从数据库返回的数据返回的 JSON 没有键,只有值。我循环遍历对象行,比如"median_risk": "{1.05, 1.25, 1.07, 1.13}",如下所示:

for(ele in median_risk){
    console.log('--->', ele);
}

但它返回不合逻辑的输出,例如:

---> 1
---> 2
---> 3
---> 4
---> 5
---> 6
---> 7
---> 8
---> 9
---> 10
---> 11
---> 12
---> 13

我被困了一段时间,如果有人可以帮助我解决这个问题或任何其他更好的方法,非常感谢!

MySQL 版本:5.7 将 AWS RDS Aurora DB 与 Nodejs 结合使用

【问题讨论】:

  • 你试过median_risk.split(', ')吗?
  • @Anatoly。是的,它返回包含整个对象的新数组,如下所示:[ '{1.11', ' 2.8', ' 2.5', ' 0.3}' ]
  • @Akina 我已经更新了问题
  • @Akina 我的错。我修复了插入命令
  • NOW() 不能用引号括起来 - 用引号括起来的是字符串文字,而不是函数调用。

标签: mysql node.js json amazon-web-services


【解决方案1】:

我可以建议 node.js 解决这个问题:

const data = {
    "patient_set_id": "5a9dbfca-74d6-471a-af27-31beb4b53bb2",
    "calculation_time": "2020-12-01 11:57:34",
    "label": "{5/27/20, Apr. 2020, Aug 2019, Dec 2019}",
    "critical_count": "{2, 4, 5, 4}",
    "median_risk": "{1.05, 1.25, 1.07, 1.13}"
};

const labels = data.label.split(',');
const critical_counts = data.critical_count.split(',');
const median_risks = data.median_risk.split(',');

const internals = labels.reduce((internals, l, i)=>{
    const clean = (s) => s.replace('{','').replace('}','').trim();
    internals.push({
        label: clean(l),
        cat4_cnt: {count: clean(critical_counts[1])},
        median: clean(median_risks[i])
    });
    return internals;
},[])

console.log(internals);

【讨论】:

  • 感谢它就像一个魅力。如果我遵循的 MYSQL 数据方法可以正确地将嵌套数据插入表中,您能否提出一个小建议?
  • 我不知道你的情况,但实际上 MySQL 不是存储嵌套数据的最佳选择。我建议将 MongoDB 视为文档存储。无论如何,如果您想将 JSON 数据存储在 MySQL 中,请将其存储为 JSON 格式。查看示例:sqlize.online/…
  • 最后一个小查询。我需要将此 const distribution_bins = "{[0.0, 0.3, 0.6, +INF], [0.0, 0.12, 0.24, +INF]}"; 拆分为 2 个单独的数组,这意味着,从该对象中提取这 2 个数组。我正在尝试这样:distribution_bins.split('], ')。但这并没有给我正确的数据。如果我接近它,你能确认我吗?
  • 请不要使用 cmets 提问,另开问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-08
  • 1970-01-01
  • 2013-10-21
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多