确保数组元素的索引不能按预期工作。
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需要一个索引),这就没有用了。
答案 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