我使用 Mongoid 作为我的 Rails 应用程序的数据库。注意到日志中有太多 QUERY 行,我决定看一看。
部分代码如下:
<%= if movie.directors.first
... Do something ...
end %>
为此,日志显示了两个查询
MOPED: 127.0.0.1:27017 QUERY database=tgmd-wiki collection=directors selector={"$query"=>{"$and"=>[{"_id"=>{"$in"=>["510a097b53c205c294000163"]}}]}, "$orderby"=>{:_id=>1}} flags=[:slave_ok] limit=-1 skip=0 batch_size=nil fields=nil (0.7060ms)
MOPED: 127.0.0.1:27017 QUERY database=tgmd-wiki collection=directors selector={"$query"=>{"$and"=>[{"_id"=>{"$in"=>["510a097b53c205c294000163"]}}]}, "$orderby"=>{:_id=>1}} flags=[:slave_ok] limit=-1 skip=0 batch_size=nil fields=nil (0.4706ms)
当我将其更改为:
<%= if movie.directors[0]
... Do something ...
end %>
只有一个查询。
MOPED: 127.0.0.1:27017 QUERY database=tgmd-wiki collection=directors selector={"$and"=>[{"_id"=>{"$in"=>["510a097b53c205c294000163"]}}]} flags=[:slave_ok] limit=0 skip=0 batch_size=nil fields=nil (0.7353ms)
为什么第一种方法会进行重新查询?由于我的代码中有很多这样的查询,因此不可能将其忽略为仅 0.4 毫秒的差异。
有什么见解吗?