我在使用条件和#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
答案 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
条件的案例,但我会认为你作为一个测试用例,它有点违反直觉的。