Mongodb
mongo解釋結果中的PROJECTION階段是什麼意思
我在 mongodb shell 的分片集群上執行解釋命令。
stage
從輸出中我看到第一個inputStage
是PROJECTION
. 我不太明白這個階段是什麼意思。我在 mongodb 網站上找不到它。這個階段有定義嗎?"winningPlan" : { "stage" : "SUBPLAN", "inputStage" : { "stage" : "PROJECTION", "transformBy" : { "body" : 1, "headers.Date" : 1 }, "inputStage" : { "stage" : "SHARDING_FILTER", "inputStage" : { "stage" : "FETCH", "inputStage" : { "stage" : "OR", "inputStages" : [ { "stage" : "IXSCAN", "keyPattern" : { "filename" : 1 }, "indexName" : "filename_1", "isMultiKey" : false, "multiKeyPaths" : { "filename" : [ ] }, "isUnique" : false, "isSparse" : false, "isPartial" : false, "indexVersion" : 2, "direction" : "forward", "indexBounds" : { "filename" : [ "[\"1046\", \"1046\"]" ] } }, { "stage" : "IXSCAN", "keyPattern" : { "headers.From" : 1 }, "indexName" : "headers.From_1", "isMultiKey" : false, "multiKeyPaths" : { "headers.From" : [ ] }, "isUnique" : false, "isSparse" : false, "isPartial" : false, "indexVersion" : 2, "direction" : "forward", "indexBounds" : { "headers.From" : [ "[\"xxx@gmail.comm\", \"xxx@gmail.com\"]" ] } } ] } } } } }, "rejectedPlans" : [ ] }
我使用的查詢命令是:
db.testmsg.find( { $or: [ { "filename": "1046"}, {"headers.From":"xxx@gmail.com"}] },{ "body": 1, "headers.Date": 1 }).explain();
在您的查詢中,您有
,{"body": 1, "headers.Date": 1}
所謂的“投影”,您可以在其中告訴查詢,您想要獲取哪些鍵(+ _id)。如果您不需要_id
在結果中(您的項目_id:0
)並且可以從索引中找到所有其他鍵,則可以從索引返回結果,並且數據庫引擎不需要去實際的集合來獲取_id
(那是因為 _id 總是返回,除非它被投影出來;如果索引沒有 _id 作為欄位之一,則必須從磁碟讀取值)