首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql 5.7 json数据类型,在Rails 5中使用activerecord进行查询

Mysql 5.7 json数据类型,在Rails 5中使用activerecord进行查询
EN

Stack Overflow用户
提问于 2016-05-18 20:59:33
回答 4查看 7.9K关注 0票数 7

我正在用Rails 5 rc1做一个应用程序。Rails5支持MySQL5.7 json数据类型。

代码语言:javascript
复制
add_column :organizations, :external, :json

假设此列中的值如下:

代码语言:javascript
复制
+---------------------------+
| external                  |
+---------------------------+
| {"id": 10, "type": "mos"} |
+---------------------------+

为了在external列中搜索特定的"id“和"type”,我在mysql中使用以下查询:

代码语言:javascript
复制
select external from organizations where JSON_CONTAINS(external,'{"id": 10, "type": "mos"}') ;

现在,我想知道如何使用rails进行相同的查询。以下代码不起作用:

代码语言:javascript
复制
Organization.where("JSON_CONTAINS(external,'{"id": 10, "type": "mos"}')")

注意:我不能删除json文本周围的引号,因为它是查询的一部分。

EN

回答 4

Stack Overflow用户

发布于 2016-07-11 12:58:28

您仍然可以利用ActiveRecord的where方法并绑定变量,而无需求助于find_by_sql。

代码语言:javascript
复制
Organization.where("external->'$.id' = :id and external->'$.type' = :type", id: 10, type: "mos")
票数 12
EN

Stack Overflow用户

发布于 2017-06-30 06:22:52

使用MYSQL,您可以使用JSON_EXTRACT从存储在字段中的JSON对象中提取值。在你的情况下,试着使用...

代码语言:javascript
复制
Organization.where("JSON_EXTRACT(external, '$.id') = 10 AND JSON_EXTRACT(external, '$.type') = 'mos'")

只是为了好玩,在伪代码中...

代码语言:javascript
复制
<Class>.where("JSON_EXTRACT(<column_header>, '$.<object key>') <comparison operator> <object value>")

这应该可以完成工作,尽管可能有一种更漂亮的方式来编写它:)

票数 5
EN

Stack Overflow用户

发布于 2016-11-08 17:55:50

如下所示:

代码语言:javascript
复制
id_field = '$."id"'
type_field = '$."type"'    
Organization.where("JSON_UNQUOTE(json_extract(external, '#{id_field}')) = ? AND JSON_UNQUOTE(json_extract(external, '#{type_field}')) = ?", 10, "mos")
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37300385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档