2

この「スキーマ」に続くコレクションがあります。

{
  _id: ObjectId,
  order: Number,
  fieldA: ObjectId,
  fieldB: Array[ObjectId]
}

そして、このように定義されたインデックス:

{
  fieldA: 1,
  fieldB: 1,
  order: 1
}

このような検索クエリを実行する場合:

{
  $and: [
    {fieldA: {$in: [{"$oid":"592edae196232608d00f78f5"},{"$oid":"592edadc96232608d00f5614"}]}},
    {fieldB: {$in:[{"$oid":"592edace96232608d00ef77f"},{"$oid":"592edacd96232608d00ef34b"}]}}
  ]
}

としてsort定義された

{
  order: 1
}

クエリは正常に実行され、インデックスはクエリをカバーし、説明計画は私を示しています:

  • 4 IXSCAN
  • 1 SORT_MERGE
  • 1 フェッチ

問題: クエリを実行した場合fieldA(fieldB結合のよう $inものを作成しようとしている)、インデックス作成が同じように動作せず、クエリがカバーされず、並べ替えがメモリ内で行われ、説明計画が表示されます。自分 :

  • 1 イクススキャン
  • 1 フェッチ
  • 1 SORT_KEY_GENERATOR
  • 1ソート

さらに悪いことに、このクエリを Mongoose から実行すると、並べ替え操作でメモリ不足になります:/

4

0 に答える 0