0

mongodbシェルでの「getIndexes」コマンドの出力は次のとおりです。

db.users.getIndexes()
[
    {
        "v" : 1,
        "key" : {
            "online" : 1,
            "region" : 1,
            "status" : 0
        },
        "ns" : "Pr.users",
        "name" : "online_1_region_1_status_-1"
    },
    {
        "v" : 1,
        "key" : {
            "birthdate" : 1,
            "status" : 1,
            "region" : 1,
            "sex" : 1,
            "profile.uptime" : -1
        },
        "ns" : "Pr.users",
        "name" : "birthdate_1_status_1_region_1_sex_1_profile.uptime_-1"
    }
]

「キー」値の「0」とはどういう意味ですか?ドキュメント(http://docs.mongodb.org/manual/reference/method/db.collection.getIndexes/)には、「1」と「-1」のみがあります。

system.indexes.key

インデックスに保持されているキーとインデックスの順序を保持しているドキュメントが含まれています。インデックスは、降順または昇順のいずれかです。負の値(例:-1)は、インデックスが降順でソートされていることを示し、正の値(例:1)は、インデックスが昇順でソートされていることを示します。

ありがとう!

4

1 に答える 1

0

これは未定義の動作だと思います。以下の例から判断すると、mongoはインデックス値の方向が0に設定されていると本当に混乱します。

簡単なテスト:

降順インデックス

db.test.ensureIndex({t : 1})

テストコレクションをフィールド't'でソートするときに使用されるカーソルを見てみましょう

db.test.find.sort({t : 1}).explain()

使用カーソル:"cursor" : "BtreeCursor t_1"

db.test.find.sort({t : -1}).explain()

使用カーソル:"cursor" : "BtreeCursor t_1 reverse"

これは予想される動作です。

昇順インデックス

db.test.ensureIndex({t : -1})

-

db.test.find.sort({t : 1}).explain()

使用カーソル:"cursor" : "BtreeCursor t_-1 reverse"

db.test.find.sort({t : -1}).explain()

使用カーソル:"cursor" : "BtreeCursor t_-1"

これも予想される動作です。

インデックス0

db.test.ensureIndex({t : 0})

-

db.test.find.sort({t : 1}).explain()

使用カーソル:"cursor" : "BtreeCursor t_0 reverse"

db.test.find.sort({t : -1}).explain()

使用カーソル:"cursor" : "BtreeCursor t_0 reverse"

両方の並べ替え方向で、mongoは逆カーソルを使用しています。

なぜmongoがそのようなことを処理していないのかわかりません。ドキュメントの簡単な段落でも十分です。

面白いことに、文字列をインデックスの方向として設定することもできます。

{
        "v" : 1,
        "key" : {
            "t" : "sjdhfsdfsdf"
        },
        "ns" : "playground.test",
        "name" : "t_"
    }

またはこのようなもの:

db.test.ensureIndex({t: ObjectId()}, {additionalParam : "dfsdf"})
...
{
        "v" : 1,
        "key" : {
            "t" : ObjectId("51527ebaa845a81ea8434d69")
        },
        "ns" : "playground.test",
        "name" : "t_",
        "additionalParam" : "dfsdf"
    }
于 2013-03-27T05:09:44.090 に答える