首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么multiKey索引会阻塞MongoDB中的indexOnly查询?

为什么multiKey索引会阻塞MongoDB中的indexOnly查询?
EN

Stack Overflow用户
提问于 2013-11-17 19:18:27
回答 2查看 709关注 0票数 4

在读取MongoDB集合中的数据时,我尝试只使用索引,因为我有一些大型文档,而对于这个查询,我只需要一个字段。

如果索引是一个indexOnly索引,那么我就不能使用multiKey = true。

以下是我所做的测试:

代码语言:javascript
复制
db.test.drop()
db.test.insert({a:1})
db.test.ensureIndex({a:1})
db.test.find({a:1}, {_id:0, a:1}).explain()

-> indexOnly = true,isMultiKey = false

代码语言:javascript
复制
db.test.insert({a : [2,3]})
db.test.find({a:1}, {_id:0, a:1}).explain()

-> indexOnly = false,isMultiKey = true

文档提到了多键索引的一些限制,但没有提到这个。有没有人知道如何同时使用多键和索引?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-17 19:36:23

来自:http://docs.mongodb.org/manual/tutorial/create-indexes-to-support-queries/#create-indexes-that-support-covered-queries

如果集合中的任何文档中的任何索引字段包括数组,则索引无法覆盖查询。如果索引字段是数组,则索引将成为多键索引,无法支持覆盖的查询。

在测试集合中插入数组,所以当mongo创建索引时,它必须创建一个MultiKey索引(它意味着为数组的每个项创建索引)。

票数 6
EN

Stack Overflow用户

发布于 2013-11-17 19:37:02

注意,当您有一个indexOnly查询时,返回的文档必须仅从索引中的信息中合成。这意味着,如果不查看文档,则必须返回正确的准确文档。

对于multiKey索引,查询不知道是否返回

{ "a" : 1 }

{ "a" : [ 1 ] }

它所能说明的就是"a"的值为1,索引为multiKey类型。它需要查看文档,以判断"a"的类型是数组还是数字。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20035010

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档