【发布时间】:2020-07-12 08:15:47
【问题描述】:
以下场景:我的 sql 表中有一个名为“address”的 JSON 数据列。我在其中插入了一组对象。稍后我将需要通过找出请求中的哪个type 将被传递来选择数组的整个对象。
因此,如果我将{ "type": "shipping" } 传递给我的 REST API,我想获取对象中标记为“shipping”类型的所有数据。
只是我尝试过的不同 JSON 格式之一:
{
"address": [
{
"type": "shipping",
"street": "streetName",
"streetNumber": "1"
},
{
"type": "billing",
"street": "streetName",
"streetNumber": "2"
},
{
"type": "custom",
"street": "streetName",
"streetNumber": "3"
}
]
}
这就是数据存储在单列中的方式:
[
{"type": "custom", "street": "streetName", "streetNumber": "1"},
{"type": "shipping", "street": "streetName", "streetNumber": "2"},
{"type": "billing", "street": "streetName", "streetNumber": "3"}
]
所以我尝试用 MySQL 的 JSON 函数来做一些魔术。类似的查询
SELECT JSON_SEARCH(address, 'one', 'shipping')
FROM user_data;
工作得很好,但这不是我需要的结果。所以我想到了使用子查询
SELECT JSON_EXTRACT(address, (SELECT JSON_SEARCH(address, 'one', 'shipping')))
FROM user_data
WHERE user_id = 1;
但这只会以“无效的 JSON 路径表达式”结束(错误代码:3143)。 我已经尝试过使用不同的查询和 JSON 数据格式,例如使用数组我尝试插入数据,例如
"address": {
"shipping": {
"street": ...
.
},
"billing": {
"street": ...
.
}
}
现在我只是感到困惑,似乎只有 mysql 文档现在没有帮助......
【问题讨论】:
-
为什么要使用 JSON 作为地址,而不是创建第二个表
Addresses,其中包含type、street、streetNumber等的普通列?然后你可以在Addresses表中每行存储一个地址,并且很容易找到它。 -
我想建立一个CRM系统,存储客户数据的客户应该能够为客户添加任意数量的地址。所以也许他最终有 10000 个客户,每个客户可能有 2-5 个地址。由于可扩展性和性能问题,我想防止有数以千计的行......但如果数据的数量不会影响这一点,我也可以做一个单独的表。 (联系数据、个人数据等也是如此……我还想防止有数千张表)
-
+ 每个客户都可能有其他要求...也许有人需要另外 10 列...编辑此表将比使用简单的文档对象更工作(我猜)
-
但正如您所发现的,搜索 JSON 数据几乎是不可能的。它至少要复杂得多。
-
伤心......这本可以让我的生活变得更轻松。好吧,那我会坚持你的提议。谢谢!