【发布时间】:2013-09-20 19:23:01
【问题描述】:
我正在尝试计算某些类型文章的数量。我有一个非常低效的查询:
Article.where(status: 'Finished').select{|x| x.tags & Article::EXPERT_TAGS}.size
在我成为一名更好的程序员的过程中,我想知道如何让这个查询变得更快。 tags 是Article 中的一个字符串数组,Article::EXPERT_TAGS 是另一个字符串数组。我想找到数组的交集,并得到结果记录数。
编辑:Article::EXPERT_TAGS 和 article.tags 被定义为 Mongo 数组。这些数组包含字符串,我相信它们是序列化的字符串。例如:Article.first.tags = ["Guest Writer", "News Article", "Press Release"]。不幸的是,这没有正确设置为单独的标签表。
第二次编辑:我使用的是 MongoDB,所以实际上它使用的是 MongoWrapper,如 MongoMapper 或 mongoid,而不是 ActiveRecord。这是我的一个错误,对不起!由于这个错误,它搞砸了对这个问题的分析。感谢 PinnyM 指出错误!
【问题讨论】:
-
这个字符串数组是如何存储在数据库中的——作为一个单独的表(请表模式)或一个数组字段?您使用的是什么 DBMS?
-
我似乎通过序列化数组将
tags的列表存储在单个列中(@John,请保持诚实) -
这是作为数组存储在 MongoDB 中的单个列中,而不是作为单独的表(回想起来这会让生活变得更轻松)。
-
如果您使用的是 MongoDB,为什么不使用 Mongoid 而不是 ActiveRecord?
标签: ruby-on-rails arrays mongodb