我有一个包含数组中嵌入文档的文档。这个目的是允许别名登录,即:一个用户需要能够拥有多个登录名(username + 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_id
和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
}
]
]
}
}
答案 0 :(得分:1)
这些索引是允许的,而你的索引似乎正在运行。每个数组元素都单独添加到索引中,因此对大型数组进行索引可能会快速增加索引的大小。对于一些不应成为问题的用户名的别名。