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

时间:2012-01-23 00:00:26

标签: 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,那么正确的语法是什么?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

在得分列中搜索包含字符串“CLE”的行应该有效:

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

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