在读取MongoDB集合中的数据时,我尝试只使用索引,因为我有一些大型文档,而对于这个查询,我只需要一个字段。
如果索引是一个indexOnly索引,那么我就不能使用multiKey = true。
以下是我所做的测试:
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
db.test.insert({a : [2,3]})
db.test.find({a:1}, {_id:0, a:1}).explain()-> indexOnly = false,isMultiKey = true
文档提到了多键索引的一些限制,但没有提到这个。有没有人知道如何同时使用多键和索引?
发布于 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索引(它意味着为数组的每个项创建索引)。
发布于 2013-11-17 19:37:02
注意,当您有一个indexOnly查询时,返回的文档必须仅从索引中的信息中合成。这意味着,如果不查看文档,则必须返回正确的准确文档。
对于multiKey索引,查询不知道是否返回
{ "a" : 1 }
或
{ "a" : [ 1 ] }
它所能说明的就是"a"的值为1,索引为multiKey类型。它需要查看文档,以判断"a"的类型是数组还是数字。
https://stackoverflow.com/questions/20035010
复制相似问题