Ruby 如何使用DataMapper查询JSON编码列的内容?

Ruby 如何使用DataMapper查询JSON编码列的内容?,ruby,json,datamapper,Ruby,Json,Datamapper,我想我应该利用DataMapper存储JSON对象的能力来保持我的表整洁,但文档并没有阐明如何查询JSON值。我正在存储篮球比赛的分数,如下所示: {"NJN":[15,20,27,23,85],"CLE":[17,17,28,29,91]} 目前,为了寻找克利夫兰骑士队的比赛,我正在做以下工作: Game.all.reject { |g| !g.scores['CLE'] } 这是非常缓慢和低效的Game.all(:scores['CLE'])抛出一个NoMethodError,那么正确的

我想我应该利用DataMapper存储JSON对象的能力来保持我的表整洁,但文档并没有阐明如何查询JSON值。我正在存储篮球比赛的分数,如下所示:

{"NJN":[15,20,27,23,85],"CLE":[17,17,28,29,91]}
目前,为了寻找克利夫兰骑士队的比赛,我正在做以下工作:

Game.all.reject { |g| !g.scores['CLE'] }

这是非常缓慢和低效的
Game.all(:scores['CLE'])
抛出一个
NoMethodError
,那么正确的语法是什么呢?

您不打算在JSON上搜索。能够将JSON保存在DB中是很有用的,但是如果需要对其进行搜索,则需要重新考虑您的模式。DataMapper不是好的数据库设计的灵丹妙药;)


假设您使用JSON的原因仅仅是方便,那么您应该将JSON编码的数据移动到单独的模型中,并使用关联将其映射。您可以编写迁移,将当前存储的记录转换为新格式。

在“分数”列中搜索包含字符串“CLE”的行应该可以:

Game.all :scores.like => "%CLE%"

如果您将对该信息进行大量查询,则应考虑使用规范化的数据库模式来提高性能。