Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql JSONB中的Postgres搜索_Sql_Json_Postgresql_Postgresql 10 - Fatal编程技术网

Sql JSONB中的Postgres搜索

Sql JSONB中的Postgres搜索,sql,json,postgresql,postgresql-10,Sql,Json,Postgresql,Postgresql 10,行中的自定义字段如下所示: [ { "value":"Test Name", "display_name":"Name", "servicio_tags":[ "person-name" ] }, { "value":"", "display_name":"Telefonnummer", "servicio_tags":[ "phone" ]

行中的自定义字段如下所示:

[
   {
      "value":"Test Name",
      "display_name":"Name",
      "servicio_tags":[
         "person-name"
      ]
   },
   {
      "value":"",
      "display_name":"Telefonnummer",
      "servicio_tags":[
         "phone"
      ]
   },
   {
      "value":"test@test.net",
      "display_name":"E-Mail",
      "servicio_tags":[
         "e-mail"
      ]
   },
   {
      "value":"Sonnberg 170",
      "display_name":"Adresse",
      "servicio_tags":[
         "address"
      ]
   },
   {
      "value":"1/",
      "display_name":"Personen Anzahl",
      "servicio_tags":[
         "person-number-info"
      ]
   },
   {
      "value":"",
      "display_name":"Notiz",
      "servicio_tags":[
         "trace"
      ]
   },
   {
      "value":"A la Carte",
      "display_name":"Typ",
      "servicio_tags":[
         "price-type"
      ]
   },
   {
      "value":"Montag, 11. Mai 2020 19:30",
      "display_name":"Anreise",
      "servicio_tags":[
         "arrival"
      ]
   },
   {
      "value":"Montag, 11. Mai 2020 20:30",
      "display_name":"Abreise",
      "servicio_tags":[
         "departure"
      ]
   },
   {
      "value":"2020-05-11 19:30",
      "display_name":"Ankunft bei Reservierung",
      "servicio_tags":[
         "arrival",
         "hidden"
      ]
   },
   {
      "value":"2020-05-11 20:30",
      "display_name":"Abfahrt bei Reservierung",
      "servicio_tags":[
         "departure",
         "hidden"
      ]
   }
]
我想通过使用搜索词搜索对象的
键的值来查询此数据库,这些对象包括
服务标签“:[“人名”]
服务标签“:[“全名”

因此,如果searchTerm是
a
,它应该返回此行,因为JSON中的对象

{
      "value":"Anton Hoerl Jun.",
      "display_name":"Name",
      "servicio_tags":[
      "person-name"
      ]
},
符合这一标准

我的尝试:

const fullNameString = '%{"value": "' + searchTerm + '", "display_name": "Name", "servicio_tags": ["full-name"]}%';
const personNameString = '%{"value": "' + searchTerm + '", "display_name": "Name",
"servicio_tags": ["person-name"]}%';

const result = await this.db.query(
`SELECT * 
FROM guest_group
AND custom_fields::text like $2
OR custom_fields::text like $3 LIMIT 5`, [customerId, fullNameString, personNameString]);
此查询没有给出所需的结果,因为它仅在seachTerm与键值完全相同时返回行。如果value键的值仅包含searchTerm,我希望它也返回该行


谢谢你的帮助

您需要取消数组的测试并比较各个值:

select g.*
from guest_group g
where exists (select *
              from jsonb_array_elements(g.custom_fields) as f(element)
              where f.element ->> 'value' ilike 'a%');
注意,我使用了
ilike
来进行不区分大小写的比较