使用RegExp和Array进行查询

时间:2012-10-16 23:59:49

标签: regex mongodb mongoid ruby-on-rails-3.2

我有一个班级Post,其范围如下:

scope :by_tag, ->(tag){ where(:desc => /##{Regexp.escape(tag)}/) }

它适用于一个标签,但我无法使用各种标签。

例如:我不能让它给我标记为#rails AND #regexp的帖子。

使用条件联合我可以将它标记为#rails OR #regexp标记的帖子。

我怎样才能让它发挥作用?我正在使用mongoid,顺便说一句。

提前致谢。


只是不是OR的fount。发生的事情是我第二次调用by_tag,它会覆盖前一个。我相信那是因为它是同一个属性。

有人知道如何解决这个问题吗?感谢

1 个答案:

答案 0 :(得分:1)

Regexp查询往往很慢。相反,存储一组标记并使用$in来查询数组。

使用Mongoid 2.x使用all_in

scope :by_tags, ->(*tags) { all_in(tags: *tags) }

使用Mongoid 3使用all merge strategy

scope :by_tags, ->(*tags) { all(tags: *tags) }