【问题标题】:NODE JS & MySQL Foreign Key Multilevel JSON ObjectNODE JS & MySQL 外键多级 JSON 对象
【发布时间】:2018-09-19 01:51:42
【问题描述】:

我将 NODEJS 和 MySQL 用于 API 服务器,但遇到了问题。由于外键,我正在运行的查询有多行结果。

User Table           Address Table
|id|  name|         |id|user_id|                        Address|
| 1| frank|         | 1|      1|       123 main street, Moncton|
| 2| steve|         | 2|      2|97 duplessie street, Edmundston|
                    | 3|      2|    933 manhole av, Grand Sault|

我将如何为我的查询结果或至少为我的 API 响应获取如下所示的多级 json 对象。

{
  "id":1,
  "name": "frank",
  "addresses": [
    {"id":1,"Address":"123 main street, Moncton"}
  ]
},
{
  "id":2,
  "name": "steve",
  "addresses": [
    {"id":2,"Address":"97 duplessie street, Edmundston"},
    {"id":3,"Address":"933 manhole av, Grand Sault"}
  ]
}

【问题讨论】:

    标签: mysql json node.js


    【解决方案1】:

    我按照@dmfay 的指示提出了一个适合我的解决方案。

    这是我传递 2 个 JSON 对象以将地址合并到用户 JSON 中并在单个 JSON 对象中返回所有内容的函数。

    function combineResults(users, addresses){
      ***********************************
      *** Go through each user object ***
      ***********************************
      users.forEach(function(user) {
          user.addresses = addresses.find(address => address.user_id === user.id);
      }
    
      return users;
    }
    

    【讨论】:

      【解决方案2】:

      如果您只是运行原始查询,那么您得到的结果就是您得到的结果。对象关系映射库(如 Objection、Bookshelf 或 Sequelize)会自动为您处理此问题,但可能会涉及比您想要的更多的设置和/或抽象。

      如果您希望保持最小化,您始终可以自己处理结果数组。前段时间,我在自己的项目(Postgres 的数据映射器)中遇到了这个确切的问题,并开发了decomposer,你应该可以毫无问题地进行蚕食。请参阅docs 了解构建模式。

      【讨论】:

      • 请更新您的链接和标记,以便版主取消删除。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-29
      • 2017-06-05
      • 2012-10-24
      • 2021-08-06
      • 1970-01-01
      • 2019-08-10
      相关资源
      最近更新 更多