在 JSON 对象中搜索嵌套的对象数组

问题描述 投票:0回答:2

我需要进行查询以在子字符串搜索的条件下返回整行。此搜索必须匹配名为“movies”的列,并且它是其中的一个 JSON 对象,该对象内部是一个名为cast 的数组。该数组包含具有名称字段的演员对象。

搜索旨在将子字符串搜索与演员姓名相匹配。如果有匹配,则返回电影行。

数据结构:

`movie`: {
    `cast`: [
        {`name`: "Cleveland"},
        {`name`: "Joe"},
        {`name`: "Quagmire"}
    ]
}

我正在使用 whereRaw 查询,但我可能没有走上正确的轨道。我认为 SQLite 可能不支持 JSON 数组迭代,还有其他方法吗?

sqlite node-sqlite3
2个回答
1
投票

在 json_each(json_extract()) 之后再次使用 json_extract() 来提取每个 x 和 y 并聚合:

SELECT f.id, 
   MIN(json_extract(value, '$.x')) x, 
   MIN(json_extract(value, '$.y')) y
FROM features f, json_each(json_extract(f.data, '$.A.B.coordinates'))
GROUP BY f.id

查看演示


0
投票

您可以使用

json_each
提取行并在
LIKE
上执行
value->'$.name'
:

select
  *
from
  things
where
  exists (
    select
      1
    from
      json_each(movie, '$.cast')
    where
      value->'$.name' like '%land%'
  );

输入:

create table things (movie text);

insert into things (movie) values ('{
    "cast": [
        {"name": "Cleveland"},
        {"name": "Joe"},
        {"name": "Quagmire"}
    ]
}');

输出带有

%land%
:

{
    "cast": [
        {"name": "Cleveland"},
        {"name": "Joe"},
        {"name": "Quagmire"}
    ]
}

输出带有

'%random%'
:无行。

© www.soinside.com 2019 - 2024. All rights reserved.