を行った後、FETCHでヌルフィルタ用モンゴクエリ、なぜ<a href="https://docs.mongodb.com/manual/tutorial/query-for-null-fields/" rel="nofollow noreferrer">Mongo Documentation</a>によるとIXSCAN
{ item : null }
クエリはどちらかが値null
であるか、それがitem
フィールドが含まれていないitem
フィールドを含む文書が一致します。
私はこのためのドキュメントを見つけることはできませんが、私の知る限り、どちらの場合は、(値がnull
であるか、フィールドが欠落している)null
としてインデックスに格納されています。私はdb.orders.createIndex({item: 1})
、その後db.orders.find({item: null})
をすれば
だから、私はIXSCAN
は、どちらかが値であるnull
またはそのitem
フィールド、およびドキュメントのみが含まれていないitem
フィールドが含まれているすべてのドキュメントを見つけることを期待します。
を実行した後にがのステージでfilter: {item: {$eq: null}}
を実行するのはなぜですか。フィルタリングする必要がある文書はありますか?
{
"queryPlanner" : {
"plannerVersion" : 1,
"namespace" : "temp.orders",
"indexFilterSet" : false,
"parsedQuery" : {
"item" : {
"$eq" : null
}
},
"winningPlan" : {
"stage" : "FETCH",
"filter" : {
"item" : {
"$eq" : null
}
},
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"item" : 1
},
"indexName" : "item_1",
"isMultiKey" : false,
"isUnique" : false,
"isSparse" : false,
"isPartial" : false,
"indexVersion" : 1,
"direction" : "forward",
"indexBounds" : {
"item" : [
"[null, null]"
]
}
}
},
"rejectedPlans" : [ ]
},
"serverInfo" : {
"host" : "Andys-MacBook-Pro-2.local",
"port" : 27017,
"version" : "3.2.8",
"gitVersion" : "ed70e33130c977bda0024c125b56d159573dbaf0"
},
"ok" : 1
}
私は多分undefined
値はnull
としてインデックス付けになるだろうと思ったが、簡単な実験はこれを除外:
> db.orders.createIndex({item: 1})
{
"createdCollectionAutomatically" : true,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
> db.orders.insert({item: undefined})
WriteResult({ "nInserted" : 1 })
> db.orders.find({item: {$type: 6}}).explain()
{
"queryPlanner" : {
"plannerVersion" : 1,
"namespace" : "temp.orders",
"indexFilterSet" : false,
"parsedQuery" : {
"item" : {
"$type" : 6
}
},
"winningPlan" : {
"stage" : "FETCH",
"filter" : {
"item" : {
"$type" : 6
}
},
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"item" : 1
},
"indexName" : "item_1",
"isMultiKey" : false,
"isUnique" : false,
"isSparse" : false,
"isPartial" : false,
"indexVersion" : 1,
"direction" : "forward",
"indexBounds" : {
"item" : [
"[undefined, undefined]"
]
}
}
},
"rejectedPlans" : [ ]
},
"serverInfo" : {
"host" : "Andys-MacBook-Pro-2.local",
"port" : 27017,
"version" : "3.2.8",
"gitVersion" : "ed70e33130c977bda0024c125b56d159573dbaf0"
},
"ok" : 1
}