0

我在理解带有标准和#find 的内容时遇到了一些麻烦。

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

def returns_criteria
  MyModel.in(...)
end

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

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

returns_criteria.find(some_id)

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

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

最小的 Repro 回购:https ://github.com/nchelluri/mongoid-in-find

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

4

1 回答 1

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选择器中的键重新分配为 from find。这可能只是 Mongoid/Moped 的一个限制,我不确定您将如何解决它。同时,我正在努力寻找一个您需要搜索多个id条件的案例,但我承认,作为一个测试案例,这有点违反直觉。

于 2013-09-01T04:12:38.843 回答