2

Mongoid を使用して、Order クラスと LineItem クラスを作成しました。Order クラスは、embeds_many line_items です。標準機能は問題なく動作しています。ただし、埋め込まれた広告申込情報の検索が常に機能するとは限りません。たとえば、LineItem クラスには「account_id」フィールドがあります。account_id フィールドが nil の Line Item を少なくとも 1 つ含むすべての Orders を見つけるために、次のようにします。

Order.where('line_items.account_id' => nil)

これにより、実際には account_id が nil の Line Items を含む 2 つの注文が返されます。どちらの注文にも複数の項目が含まれており、両方の注文で一部の項目に account_id があるため、これは期待どおりに機能しているようです。

でも

たまたま、システム内に、account_id が nil の項目を含む 4 つの注文があることを発見しました。次のようなものを使用してこれを確認しました。

Order.all.each do |o|
  puts o._id if o.line_items.where(account_id: nil).count > 0
end

これにより、4 つのオーダー ID が出力されます。これら 4 つのそれぞれについて調査し、それぞれに account_id が nil に設定された項目が実際に含まれていることを確認しました。では、なぜ最初の検索がうまくいかないのでしょうか? 最初の検索で 4 件ではなく 2 件しか返されないのはなぜですか?

掘り下げた後、最初のクエリによって返された 2 つの注文で、各注文の最初の項目の account_id が nil であることを発見しました。account_id が nil の項目を含むが最初のクエリで返されない他の 2 つの注文では、これら 2 つの注文の両方の最初の項目に account_id が nil ではないため、最初に使用した検索が実際には、各注文に埋め込まれた多数の広告申込情報のうち最初の広告申込情報のみを検索します。

これはモンゴイドのバグですか?それとも、ここで何か間違ったことをしていますか? 私は何か間違ったことをしていると仮定しなければなりませんが、それが何であるかの兆候を見つけることができません.

4

0 に答える 0