Mongoid:Criteria #find - 如何限制查找标准中的结果?

时间:2013-08-30 22:44:19

标签: ruby mongodb mongoid

我在使用条件和#find了解某些内容时遇到了一些麻烦。

我有一些看起来像的代码:

def returns_criteria
  MyModel.in(...)
end

我对标准的理解是,当你链接事物时,结果会变得更加严格。这似乎是关系集合的工作方式,至少,这可能会误导我。

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

returns_criteria.find(some_id)

然后它会在MyModel.in调用找到的结果中查找id为some_id的对象。但是这种情况并没有发生,似乎#find就像在MyModel上调用一样被调用。

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

Minimal Repro Repo:https://github.com/nchelluri/mongoid-in-find

输入in.rb:https://gist.github.com/nchelluri/6401850

1 个答案:

答案 0 :(得分:1)

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

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

原始in条件对象的选择器哈希是:

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

但是,如果你将“发现”链接到它上面,那就变成了:

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

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