我有一个MongoDB集合,我想在其上添加一个索引。出于本文的目的,我们假设集合名称为Cats
。我在Cats
集合上有一个哈希键,所以如果你db.cats.findOne();
,它将如下所示:
> db.cats.findOne();
{
"_id" : ObjectId("4f248f8ae4b0b775c9eb002d"),
"metaData" : {
"type" : "cute",
"id" : "4ed3b6c599114b488be52bc3"
},
....
}
我经常查询(使用Mongoid),类似这样的事情:
Cat.first(:conditions => { "metaData.id" => an_id }
我真的希望能够在这里利用索引,但我不能完全确定我是应该索引所有的metaData还是metaData.id(我专门针对id进行查询,而且非常经常)。< / p>
我会喜欢这个问题的任何解决方案,因为我认为如果我在这里做正确的事情,我可以大大加快查询速度。此外,这是一个独特的索引。
metaData也不是嵌入式文档。它没有自己的收藏品。它只是一个哈希,每个猫对象都有1:1的映射。
答案 0 :(得分:4)
您只需在嵌入文档中定义索引即可。这包括在内:
http://www.mongodb.org/display/DOCS/Indexes#Indexes-UsingDocumentsasKeys
对于您的具体示例,这将是:
db.Cats.ensureIndex({ "metaData.id" : 1}, {unique : true})
要比较您的结果,请在shell中使用.explain()执行一些标准查询,以比较带索引和不带索引的速度。如果您没有进行大量查询,则可能需要提示要使用的索引,以便它不会缓存“最佳”索引(不要忘记默认情况下_id上有一个)。更多解释信息: