Mongoid:Criteria#find-我如何将find限制在标准中的结果



我在理解标准和#find方面遇到了一些困难。

我有一个代码看起来:

def returns_criteria
  MyModel.in(...)
end

我对标准的理解是,随着事情的连锁,结果会变得更加严格。这似乎是关系集合的工作方式,至少,这可能会误导我

所以我的期望是,如果我打电话给:

returns_criteria.find(some_id)

那么它将在MyModel.in调用找到的结果中查找id为some_id的对象。但这并没有发生,#find的调用似乎就像在MyModel上一样。

我想将此#find限制为当前指定条件的结果。我能以某种方式做到这一点吗?

最低回购:https://github.com/nchelluri/mongoid-in-find

运行.rb的输出:https://gist.github.com/nchelluri/6401850

我想我已经发现了这里发生的事情。如果您指示Moped登录到$stdout,您可以仔细查看它向数据库发送的命令:

Moped.logger = Logger.new($stdout)
Moped.logger.level = Logger::DEBUG

原始in标准对象的选择器散列为:

selector={"_id"=>{"$in"=>["5222b8edf273e6eeb1000001", "5222b8edf273e6eeb1000002"]}

但如果你把"查找"链接到它上,它就会变成:

selector={"_id"=>"5222b8edf273e6eeb1000003"}

这基本上是Ruby散列的标准行为的结果。您已将原始in选择器中的"_id"密钥重新分配为find中的密钥。这可能只是Mongoid/Moped的一个限制,我不确定你会如何解决它。与此同时,我很难找到一个需要在多个id标准上搜索的案例,但我承认,作为一个测试案例,这有点违反直觉。

最新更新