Ruby Mongoid:Criteria#find-如何将find限制为Criteria中的结果?
我在理解一些有标准的东西和#查找时遇到了一些困难 我有一些代码看起来:Ruby Mongoid:Criteria#find-如何将find限制为Criteria中的结果?,ruby,mongodb,mongoid,Ruby,Mongodb,Mongoid,我在理解一些有标准的东西和#查找时遇到了一些困难 我有一些代码看起来: def returns_criteria MyModel.in(...) end 我对标准的理解是,当你把事情联系起来时,结果会变得更加严格。这似乎就是关系集合的工作原理,至少,这可能会误导我 所以我的期望是,如果我打电话: returns_criteria.find(some_id) 然后它将在MyModel.in调用找到的结果中查找id为some_id的对象。但这并没有发生,似乎#find的调用与MyModel的
def returns_criteria
MyModel.in(...)
end
我对标准的理解是,当你把事情联系起来时,结果会变得更加严格。这似乎就是关系集合的工作原理,至少,这可能会误导我
所以我的期望是,如果我打电话:
returns_criteria.find(some_id)
然后它将在MyModel.in调用找到的结果中查找id为some_id的对象。但这并没有发生,似乎#find的调用与MyModel的调用类似
我想将此限制为当前指定标准的结果。我可以这样做吗
最低再回购:
running in.rb的输出:我想我已经找到了这里发生的事情。如果您指示Moped登录到
$stdout
,您可以更仔细地查看它发送到数据库的命令:
Moped.logger = Logger.new($stdout)
Moped.logger.level = Logger::DEBUG
标准对象中原始的选择器哈希为:
selector={"_id"=>{"$in"=>["5222b8edf273e6eeb1000001", "5222b8edf273e6eeb1000002"]}
但如果将“查找”链接到它上,它将变成:
selector={"_id"=>"5222b8edf273e6eeb1000003"}
…这基本上是Ruby哈希的标准行为的结果。您已经从
选择器中的原始中重新分配了“\u id”
键和查找中的键。这可能只是Mongoid/Moped的一个局限性,我不确定你会如何解决它。同时,我正在努力寻找一个需要搜索多个id
标准的案例,但我同意作为一个测试案例,这有点违反直觉。我无法使用Mongoid 3复制这个问题。你能提供更多的细节吗?可能是您传递给任意的哈希的一个示例?我尝试整理一个最小的repu案例,发现没有发生错误。也许我做错了什么…结果我用的是::in,而不是::any_of。我能够重现并更新这个问题。我实际上得到了selector={“\u id”=>“52260b0073197f08c8000003”、“$”和“=>[{”\u id”=>“52260b0073197f08c8000003”}}
,但在其他方面我同意你的观点。将MyModel::in
中的与:id.in
一起使用而不是MyModel::in
与:id
一起使用,似乎可以达到预期的效果。谢谢你的帮助!顺便说一句,带有::any_of的选择器是:selector={“$”或“=>[{”\u id=>{“$in”=>[“52260ba473197f5329000001”,“52260ba473197f5329000002”]}],“_id”=>“52260ba473197f5329000003”}
。