Rails アプリのデータベースとして Mongoid を使用しています。ログに QUERY 行が多すぎることに気付き、調べてみることにしました。
コードの一部は次のとおりです。
<%= if movie.directors.first
... Do something ...
end %>
このため、ログには 2 つのクエリが表示されました
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 %>
クエリは 1 つだけでした。
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 ミリ秒の差として見過ごすことはできません。
洞察はありますか?