我们说我有一个名为"数据"的jsonb列类型。对于表"食谱"。我试图查找所有包含"数据"的记录。填写(即"数据"不为空或空括号{})。
我知道对于hstore列,使用ruby,你可以使用这样的查询来执行此操作:
Recipe.where("data <> ''")
是否存在jsonb的等效查询?
答案 0 :(得分:1)
正确阅读问题后更新:
您可以检查没有数据的列
SELECT * FROM table WHERE json_column IS NOT NULL
那么这就是
Recipe.where.not('data IS NULL')
对于具有非空哈希的列,如下所示:
SELECT * FROM table WHERE json_column&lt;&gt; &#39; {}&#39;
这转换为:
Recipe.where('data <> ?', '{}')
# or
Recipe.where("data <> '{}'")
验证查询的一个好方法是首先在SQL中运行它们(这样可以避免AR及其将Ruby转换为SQL)。然后,您可以尝试在AR中构建查询,并使用to_sql
查看AR对您的查询的影响。
Recipe.where('data <> ?', '{}').to_sql
#=> "SELECT \"recipies\".* FROM \"recipies\" WHERE (data <> '{}')"
VS。
Recipe.where('data <> ?', {}).to_sql
#=> "SELECT \"recipies\".* FROM \"recipies\" WHERE (data <> NULL)"