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”}