0

配列にドキュメントが埋め込まれたドキュメントがあります。目的は、エイリアスログインを許可することです。つまり、1人のユーザーは異なる会社に所属している可能性があるため、複数のログイン(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
                                }
                        ]
                ]
        }
}
4

1 に答える 1

1

これらのインデックスは許可されており、あなたのインデックスは機能しているようです。すべての配列要素が個別にインデックスに追加されるため、大きな配列でインデックスを作成すると、インデックスのサイズがすぐに大きくなる可能性があります。ただし、問題とならないユーザー名のいくつかのエイリアスの場合。

于 2012-10-17T10:10:48.893 に答える