วิธีการขอข้อมูเป็นอาเรย์ของ JSONB

0

คำถาม

ฉันมีโต๊ะ(คำสั่ง)กับ jsonb[] คอลัมน์ที่ชื่อ steps ใน Postgres db.

ฉันต้องการสร้างร้องขอแบบ sql เพื่อเลือกบันทึกอยู่ไหน Step1 และ Step2 และ Step3 มี สถานะความสำเร็จ

[
 {
  "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"
  }
]

โครงสร้างของโต๊ะ ชื่อ|ชื่อของ|ขั้นตอน(jsonb)

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

คำตอบที่ดีที่สุด

1

'Normalize' steps เข้าไปในรายชื่อของ LANGUAGE รายการและดูว่าพวกเขาทุกคนได้ "status":"success". BTW ของคุณตัวอย่างไม่ถูกต้อ LANGUAGE. ทั้ => ต้องการจะถูกแทนที่ด้วย : และเป็นจุลภาคมันหายไปแล้ว

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

เราสามารถใช้มันกับการค้นหากับคดีหลังจากนั้น..จบเงื่อนไขว่า? เพื่อนเก่าน่ะ ถ้า Step1','Step2','Step3'คือความสำเร็จมีคำสั่ง"Devilered"สถานะ
Timothy94

ใช่แน่นอน มีหลายทางเลือก ผมพยายามอย่างไรก็ตามที่จะให้ค้นข้อมูลที่เป็น declarative ที่สุดเท่าที่ทำได้และหลีกเลี่ยงอยากเขียนโปรแกรของรายละเอียด แต่จากนี้ไปมันเป็นเรื่องของเรื่องของส่วนตัวขอรสนิยมจริงๆแล้ว
Stefanov.sm
0

คุณสามารถใช้ LANGUAGE ค่าเก็บปฏิบัติการสำหรับเช็คสภาพมีอยู่จริงหรือไม่

สาธิต

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

แล้วถ้าคนจำนวนของขั้นตอนไม่รู้จัก upfront?
Stefanov.sm

ในภาษาอื่นๆ

หน้านี้อยู่ในภาษาอื่นๆ

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

ดังอยู่ในนี้หมวดหมู่

ดังคำถามอยู่ในนี้หมวดหมู่