将索引添加到MongoDB集合哈希字段

时间:2012-02-16 23:15:08

标签: mongodb indexing mongoid

我有一个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的映射。

1 个答案:

答案 0 :(得分:4)

您只需在嵌入文档中定义索引即可。这包括在内:

http://www.mongodb.org/display/DOCS/Indexes#Indexes-UsingDocumentsasKeys

对于您的具体示例,这将是:

db.Cats.ensureIndex({ "metaData.id" : 1}, {unique : true})

要比较您的结果,请在shell中使用.explain()执行一些标准查询,以比较带索引和不带索引的速度。如果您没有进行大量查询,则可能需要提示要使用的索引,以便它不会缓存“最佳”索引(不要忘记默认情况下_id上有一个)。更多解释信息:

http://www.mongodb.org/display/DOCS/Explain