Mongoid正则表达式为Array中的元素

时间:2011-05-21 15:13:42

标签: ruby-on-rails regex mongodb mongoid

我有两个模型,一个是User和一个嵌入式模型Message

class User
  include Mongoid::Document
  embeds_many :messages
end

class Message
  include Mongoid::Document

  field :keywords, :type => Array
end

我正在尝试做类似的事情:

u = User.last
u.messages.where(:keywords => /sometext/).first

但是这没有返回任何内容,如果该字段不是Array类型并且是String,则正则表达式似乎正常工作。我怎么能用Mongoid做这样的事情?

我还应该提一下这个Mongo查询工作正常:

db.users.find({"messages.keywords" : /index/ })

2 个答案:

答案 0 :(得分:2)

如果您正在处理数组,则使用“in”。

 users = User.where("messages.keywords".in => [/sometext/])
如果我没弄错的话,

应该有效。

亚历

User.where("messages.keywords".in => [/sometext/]).each do |user|
  message_collection_for_user = user.messages.where("keywords".in => [/sometext/])
end

现在你有了你的消息并且可以做任何事情,但你不能为所有用户提供这样的消息收集。

答案 1 :(得分:0)

您的直接Mongo查询是查找具有指定匹配子字符串的嵌入消息的所有用户文档。看起来你的Mongoid查询的目的是在已经返回的用户文档上找到匹配的消息。我不确定你正在寻找哪种行为,但如果你想在Mongoid中执行相同的Mongo-direct查询,它看起来像这样:

users = User.where("messages.keywords" => /sometext/)