如何确保MongoDB中数组的第一个元素的索引以便更快地进行查询?

时间:2012-02-28 16:15:45

标签: mongodb indexing nosql

确保数组元素的索引不能按预期工作。

E.g。以下数据

> db.test.find()
{ "_id" : 7891236423, "arr" : [ "a", "b", "c" ] }
{ "_id" : 7891236424, "arr" : [ "b", "c", "d" ] }
{ "_id" : 7891236425, "arr" : [ "b", "c", "a" ] }
>

当没有索引时,以下查询按预期工作

> db.test.find({"arr.0":"a"})
{ "_id" : 7891236423, "arr" : [ "a", "b", "c" ] }
>

但是如果我尝试在arr.0

上创建索引,则相同的查询不会返回结果
> db.test.ensureIndex({"arr.0":1})
> db.test.find({"arr.0":"a"})
>

我不明白这里发生了什么,在我看来,索引永远不会对返回的数据产生影响。还是应该呢?

这是一个错误吗?或索引滥用?我对这种行为的任何解释感到高兴,甚至更高兴任何提示如何在单个数组元素上实现索引。

PS:我知道我可以在arr上创建索引并在查询arr之前先查询arr.0,这是给定示例的有效解决方法。但是,只要我需要按arr.0对大量数据进行排序(MongoDB需要一个索引),这就没有用了。

1 个答案:

答案 0 :(得分:1)

这是1.8及之前使用的v0索引的已知问题。 2.0+中的新v1索引支持此功能。升级到2.0.3应该可以解决您的问题。您可以在此处找到有关升级到2.0的说明:http://www.mongodb.org/display/DOCS/2.0+Release+Notes#2.0ReleaseNotes-Upgrading