我最近开始使用带有 JSON1 扩展的 SQLite,它允许我存储和查询动态/json 数据。
让我们以下表和数据结构为例:
# documents table:
--------------------------------------------
id | json
---- ------------------------------------
1 | [{"id": 1}, {"id": 2}, {"id": 3}]
2 | [{"id": 11}, {"id": 12}, {"id": 13}]
我偶然发现的问题是,似乎没有一种简单的方法可以在不指定索引的情况下查询数组中的对象。或者换句话说,考虑以下伪查询:
SELECT *
FROM documents
WHERE json_extract(json, "$[*].id") > 1
# expect to return all rows that have json.*.id greater than 1
以上不起作用,因为您必须指定一个具体的数组索引,而不是[*] 。
一种解决方法可能是使用json_each
,或者json_tree
如果您必须处理嵌套数组对象,那么它可能很快就会失控,例如。sub1.*.sub2.*.sub3.id
我发现MySQL json 数据类型支持[*]但我无法为 SQLite 找到任何类似的东西。
是否有一些“隐藏”语法在我缺少的 SQLite 的 json 路径查询中指定[*] ,或者这是 JSON1 扩展的限制?