我有一个
Post
模型,其列由以下迁移定义:
add_column :posts, :comments, :jsonb, default: []
add_index :posts, :comments, using: :gin
我想知道要运行的查询,以便计算所有具有默认空数组作为
Posts
的 comments
。
Post.where("comments = '[]'").count
您可以通过将 json 转换为字符串并计算长度来完成此操作。空 json 将返回 2。这适用于 {} 和 []。 例如。返回非空评论
Post.where("length(comments::text) > 2").count
对于 Postgresql > 11,这也是一个可能的答案
Post.where('jsonb_array_length(comments) > 0')