簡體   English   中英

Rails嵌套jsonb查詢

[英]Rails nested jsonb query

我有這樣的活動記錄對象

`<BlockExercise id: 1, type: nil, user_id: 1, number: "S51_1", status: "close", exercise_distribution: {"Day1"=>{"BN3"=>"", "SQ1"=>"", "date"=>"10/03/2019"}, "Day2"=>{"BN2"=>"", "date"=>""}, "Day3"=>{"DL1"=>"", "date"=>""}, "Day4"=>{"DL2"=>"", "SQ2"=>"", "date"=>""}, "Day5"=>{"BN1"=>"", "date"=>""}}, created_at: "2019-03-15 18:59:02", updated_at: "2019-03-15 18:59:02"> `

在這里, exercise_distribution列是jsonb類型。 因為這是單個對象(行),而這里是具有唯一值的多個鍵(天)。 我想要顯示日期的鍵(天)或不為空。 因此,這里的分析服務將是"Day1"=>{"BN3"=>"", "SQ1"=>"", "date"=>"10/03/2019"}我如何通過sql查詢或任何方式其他合適的方式。

整個問題表明您正在使用JSONB,實際上應該使用關系模型並實際創建一個作為反模式的表。

json是新的EAV –當您需要它時是個很棒的工具,但不是您應該首選的工具。

雖然您可以基於JSONB列進行查詢:

BlockExercise.where("(Day1->>'date' <> '') IS NOT TRUE")

數據結構的布局方式非常笨拙,因為您必須這樣做:

BlockExercise.where("(Day1->>'date' <> '') IS NOT TRUE")
             .where("(Day2->>'date' <> '') IS NOT TRUE")
             # ...

另一方面,連接記錄要簡單得多,也更有效。

BlockExercise.joins(:exercise_distributions)
             .where.not(date: nil)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM