mongodb - 为什么在 MonogoDB 中索引可以自动转换为多键?
问题描述
给定一个空集合testdoc
,其索引如下
`db.testdoc.createIndex({"ratings.score": 1});`
然后插入一个文档db.testdoc.insert({_id: 3, ratings: {score: 23}})
查询db.testdoc.find({"ratings.score": 23}).explain()
和获胜计划是
"winningPlan" : {
"stage" : "FETCH",
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"ratings.score" : 1
},
"indexName" : "ratings.score_1",
"isMultiKey" : false,
"multiKeyPaths" : {
"ratings.score" : [ ]
},
"isUnique" : false,
"isSparse" : false,
"isPartial" : false,
"indexVersion" : 2,
"direction" : "forward",
"indexBounds" : {
"ratings.score" : [
"[23.0, 23.0]"
]
isMultiKey
是假的。
但是,插入此文档后db.testdoc.insert({_id: 1,item: "ABC",ratings: [ { score: 2, by: "mn" }, { score: 9, by: "anon" } ]})
上述查询的获胜计划是
"winningPlan" : {
"stage" : "FETCH",
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : {
"ratings.score" : 1
},
"indexName" : "ratings.score_1",
"isMultiKey" : true,
"multiKeyPaths" : {
"ratings.score" : [
"ratings"
]
},
"isUnique" : false,
"isSparse" : false,
"isPartial" : false,
"indexVersion" : 2,
"direction" : "forward",
"indexBounds" : {
"ratings.score" : [
"[23.0, 23.0]"
]
}
现在isMultiKey
是真的。
为什么更改文档结构时可以将索引更改为 isMultiKey?
MongoDB版本:4.2.5
解决方案
推荐阅读
- google-app-engine - Laravel:将 Laravel 8 api 部署到 Google Cloud App Engine
- r - ggplot中的堆积条形图
- android - Android Firebase 尝试使用主题在所有用户中发送通知缺少注册错误
- reactjs - 变异状态被认为是不好的做法,但是当我提交表单时如何避免变异状态?
- android - 如何使用 MVVM 架构在 Room Android 中获取数据
- java - -Xlog 选项无效
- excel - 在 Excel vba 中计算类型变量,可能吗?
- javascript - 异步函数调用后更新 Vue 数据值
- sorting - 公式按包含时间和文本的列排序,将文本放在最后,在 Google 表格中
- regex - Searching for 2 keywords on same line in Notepad++