我有两个模型,一个是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/ })
答案 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/)