如何在表MySQL中存储数组(对于NodeJS)

时间:2018-09-05 11:30:37

标签: mysql node.js

我最近开始学习MySQL,并且一直在尝试将其与Node结合使用以制作REST API,而不是使用通常的Mongo Node堆栈。

但是,我遇到的一个问题是在MySQL中存储数组和对象。在Mongo中,这非常容易,而在MySQL中,似乎并不那么容易。

基本上我想返回具有这样结构的JSON;

{
  "name": "My Product",
  "desc": "Product description",
  "images": [
    {
      "caption": "Product Photo 1",
      "url": "http://"
    },
    {
      "caption": "Product Photo 2",
      "url": "http://"
    },
    {
      "caption": "Product Photo 3",
      "url": "http://"
    },
  ],
  
  "pricing": {
    "standard": {
      "title": "The Standard Product",
      "desc": "Standard Product Description",
      "prices": {
        "usd": 10.99,
        "eur": 9.99,
        "gbp": 8.99
      }
    },
    "deluxe": {
      "title": "The Deluxe Product",
      "desc": "Deluxe Product Description",
      "prices": {
        "usd": 19.99,
        "eur": 17.99,
        "gbp": 15.99
      }
    }
  }
}

但是,我在理解为图像数组之类的属性实现存储的概念时遇到了一些麻烦。

我已经读到,最佳实践是将它们存储在另一个表中,以便您可以查询它们。但是我不确定我是否理解这一点,因为如果我为每个数组/对象添加一个新表,我将在大规模项目中最终得到大量的表吗?

我还阅读了有关将其存储为JSON字符串的信息,但这并不能真正完成我所追求的目标,因此,我更愿意研究上述解决方案。

2 个答案:

答案 0 :(得分:1)

您是否正在使用MySQL 8.0?它支持类似于MongoDB的document store产品,也可以通过X DevAPI使用,因此,如果您不需要,则无需使用“低级” JSON数据类型。达到相同的目的。

由于您似乎正在使用Node.js,因此还有一个X DevAPI客户端实现可用于此目的。

免责声明:我是该X DevAPI实现中的主要开发人员。

答案 1 :(得分:0)

https://scotch.io/tutorials/working-with-json-in-mysql 阅读本文

将数据类型列创建为JSON 您可以转储该数据

{
  "name": "My Product",
  "desc": "Product description",
  "images": [
    {
      "caption": "Product Photo 1",
      "url": "http://"
    },
    {
      "caption": "Product Photo 2",
      "url": "http://"
    },
    {
      "caption": "Product Photo 3",
      "url": "http://"
    },
  ],

  "pricing": {
    "standard": {
      "title": "The Standard Product",
      "desc": "Standard Product Description",
      "prices": {
        "usd": 10.99,
        "eur": 9.99,
        "gbp": 8.99
      }
    },
    "deluxe": {
      "title": "The Deluxe Product",
      "desc": "Deluxe Product Description",
      "prices": {
        "usd": 19.99,
        "eur": 17.99,
        "gbp": 15.99
      }
    }
  }
}

以后您可以查询此数据 这里参考mysql doc https://dev.mysql.com/doc/refman/8.0/en/json-search-functions.html