1

次の使用例があります: プロトコル上の理由により、削除または更新されたレコードをデータベースから削除しません。$setそれらが更新/削除された日付/時刻にフィールドをdeleted変更し、新しいレコードを作成します (更新された場合)。したがって、すべての「現在の」レコードにはフィールドがありませんdeleted」。現在のレコードのすべてのインデックスは次のようになります。

{ 
    field_a: 1, 
    field_b: 1, 
    ..., 
    deleted: 1 
} 

現在のレコードに関するクエリは次のようになります。

find( {
    field_a: "...", 
    field_b: "...", 
    deleted: { $exists: false}
} )

がインデックスを使用しているかどうかわからないため、現在のすべてのフィールド ( のないフィールド) にフィールドセットを{$exists: false}追加し、インデックスを次のように変更しました。currenttruedeleted

{ 
    field_a: 1, 
    field_b: 1, 
    ..., 
    current: 1 
} 

そして私のクエリ:

find( {
    field_a: "...", 
    field_b: "...", 
    current: true
} )

後者のケースが本当に優れているかどうか、誰か教えてもらえますか? currentそれとも、それらは慎重に実行され、追加のフィールドを割くことができますか?

ヒントをありがとう。

4

0 に答える 0