0

我有一个包含嵌入文档的文档。目的是允许别名登录,即:一个用户需要能够有多个登录(用户名+company_id+pwd),因为他或她可能属于不同的公司。

它看起来像这样:

{
    name : "James D"
    logins : [
        {company_id : 1, username : "james", pwd : "****"},
        {company_id : 2, username : "james.d", pwd : "****"},
        {company_id : 3, username : "jd", pwd : "****"}
    ]
}

我想索引到company_idand username,我使用过

> db.user.ensureIndex({"logins.username" : "james", "logins.company_id" : 1})

这是我的问题,索引有效吗?查询是否真的使用索引?我问是因为(1)我不确定 MongoDB 是否处理这种索引,以及(2)我不确定如何解释 explain() 函数。

> db.user.find({"logins.username" : "james", "logins.company_id" : 1}).explain()
{
        "cursor" : "BtreeCursor username.color_1_logins.company_id_1",
        "nscanned" : 3,
        "nscannedObjects" : 3,
        "n" : 2,
        "millis" : 1,
        "nYields" : 0,
        "nChunkSkips" : 0,
        "isMultiKey" : true,
        "indexOnly" : false,
        "indexBounds" : {
                "logins.username" : [
                        [
                                "blue",
                                "blue"
                        ]
                ],
                "logins.company_id" : [
                        [
                                {
                                        "$minElement" : 1
                                },
                                {
                                        "$maxElement" : 1
                                }
                        ]
                ]
        }
}
4

1 回答 1

1

这些索引是允许的,您的索引似乎正在工作。每个数组元素都单独添加到索引中,因此对大型数组进行索引可能会迅速增加索引的大小。对于一些不应该成为问题的用户名别名。

于 2012-10-17T10:10:48.893 回答