コレクションインデックスを正しく設定しようとしています。私のようにそれをインデックス化していますMongo - クエリに一致するインデックスがありません
// videos collection
{
_id: idString,
ts: date,
owner_id: idString,
published: boolean,
readyToPlay: boolean,
private: boolean,
deleted: boolean,
}
:私はのようなものですコレクションしまし
videos.ensureIndex({
owner_id: 1,
deleted: 1,
published: 1,
readyToPlay: 1,
private: 1,
ts: -1,
})
を、私はそれが好きで照会しています:私が説明してるとき
videos.find({
owner_id: { $in: ids },
deleted: false,
published: true,
private: false,
readyToPlay: true,
})
クエリ:取得:
[ {
queryPlanner: {
plannerVersion: 1,
namespace: 'videos',
indexFilterSet: false,
parsedQuery: { '$and': [
{ isPrivate: { '$eq': false } },
{ published: { '$eq': true } },
{ readyToPlay: { '$eq': true } },
{ owner_id: { '$in': [...] } },
{ deleted: { '$eq': false } },
] },
winningPlan: [...],
rejectedPlans: [],
},
executionStats: {
nReturned: some docs,
totalDocsExamined: all the docs,
...
},
serverInfo: { ... },
]
以降がfalseの場合、インデックスが正常に動作していないようです。私はそれをどのように変更すべきですか?
受賞計画は次のとおりです。
{ stage: 'FETCH',
inputStage: {
stage: 'SORT_MERGE',
sortPattern: { ts: 1 },
inputStages: [{
stage: 'IXSCAN',
keyPattern: {
owner_id: 1,
deleted: 1,
published: 1,
readyToPlay: 1,
isPrivate: 1,
ts: -1
},
indexName: 'owner_id_1_deleted_1_published_1_readyToPlay_1_isPrivate_1_ts_-1',
isMultiKey: false,
isUnique: false,
isSparse: false,
isPartial: false,
indexVersion: 1,
direction: 'backward',
indexBounds: { owner_id: [ '["id1", "id1"]' ],
deleted: [ '[false, false]' ],
published: [ '[true, true]' ],
readyToPlay: [ '[true, true]' ],
isPrivate: [ '[false, false]' ],
ts: [ '[MinKey, MaxKey]' ]
}
},
// a lot more stages, one for each key in ids
]
}
}
これはどの言語ですか? – J3STER
コレクションに多数のレコードがない場合は、インデックス検索の代わりにフルテーブルスキャンを行うほうが安価です – RickyA