Bir JSONB dizisi nasıl sorgulanır

0

Soru

Bir masam var (siparişler) jsonb[] adlandırılmış sütun steps postgres db'de.

Step1 ve Step2 ve Step3'ün başarı durumuna sahip olduğu kayıtları seçmek için SQL sorgusu oluşturmam gerekiyor

[
 {
  "step_name"=>"Step1",
  "status"=>"success",
  "timestamp"=>1636120240
  },
 {
  "step_name"=>"Step2",
  "status"=>"success",
  "timestamp"=>1636120275
 },
 {
  "step_name"=>"Step3",
  "status"=>"success",
  "timestamp"=>1636120279
 },
 {
  "step_name"=>"Step4", 
  "timestamp"=>1636120236
  "status"=>"success"
  }
]

tablo yapısı kimlik / ad / adımlar (jsonb)

arrays jsonb postgresql sql
2021-11-18 10:35:40
2

En iyi cevabı

1

'Normalleştir' steps JSON öğelerinin bir listesine girin ve her birinin sahip olup olmadığını kontrol edin "status":"success". Bu arada, örneğiniz geçerli bir JSON değil. Tüm => yerine sahip olması gerekir : ve virgül eksik.

select id, name from orders
where
(
 select bool_and(j->>'status' = 'success') 
 from jsonb_array_elements(steps) j
 where j->>'step_name' in ('Step1','Step2','Step3') -- if not all steps but only these are needed
);
2021-11-18 13:18:38

Bu sorguyu CASE ile kullanabilir miyiz?..sonra... SON madde mi ? Eski sevgilin için. eğer Step1','Step2', 'Step3' başarı sırası ise" Şeytanlaştırılmış " statüsüne sahiptir
Timothy94

Evet, kesinlikle. Birkaç seçenek vardır. Bununla birlikte, sorguları mümkün olduğunca bildirimsel hale getirmeye ve ayrıntıların kodlanmasını önlemeye çalışıyorum. Ama bu aslında kişisel bir zevk meselesi.
Stefanov.sm
0

Var olup olmadığını kontrol etmek için JSON value contain işlemini kullanabilirsiniz

Gösteri

select
  *
from
  test
where
  steps @> '[{"step_name":"Step1","status":"success"},{"step_name":"Step2","status":"success"},{"step_name":"Step3","status":"success"}]'
2021-11-18 13:00:24

Adım sayısı önceden bilinmiyorsa ne olur?
Stefanov.sm

Diğer dillerde

Bu sayfa diğer dillerde

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................