sql >> データベース >  >> NoSQL >> MongoDB

MongoDBでインデックスを再表示する2つの方法

    MongoDBに非表示のインデックスがある場合は、unhideIndex()を使用できます。 メソッドまたはcollMod それを再表示するための管理コマンド。

    インデックスの例

    petsというコレクションのインデックスを見てみましょう。 :

    db.pets.getIndexes()

    結果:

    [
    	{
    		"v" : 2,
    		"key" : {
    			"_id" : 1
    		},
    		"name" : "_id_"
    	},
    	{
    		"v" : 2,
    		"key" : {
    			"weight" : -1
    		},
    		"name" : "idx_weight_-1",
    		"hidden" : true
    	},
    	{
    		"v" : 2,
    		"hidden" : true,
    		"key" : {
    			"type" : 1
    		},
    		"name" : "type_1"
    	}
    ]

    3つのインデックスがあり、最後の2つは非表示になっていることがわかります。 "hidden" : trueがあるので、これを知っています。 それらの定義で。

    unhideIndexes()を使用して再表示します 方法

    インデックスを再表示する最初の方法は、db.collection.unhideIndex()を使用することです。 方法。このメソッドは、インデックスの名前またはそのキーパターンをパラメーターとして受け入れ、再表示するインデックスを指定します。

    例:

    db.pets.unhideIndex("idx_weight_-1")

    出力:

    { "hidden_old" : true, "hidden_new" : false, "ok" : 1 }

    unhideIndex()の出力 メソッドは、hiddenの古い値を表示します フィールド(この場合はtrue )と新しい値(この場合はfalse

    ただし、すでに非表示になっているインデックスを再表示する(またはすでに非表示になっているインデックスを非表示にする)と、これらは表示されず、次のようになります。

    { "ok" : 1 }

    いずれの場合も、インデックスは非表示になりません。

    unhideIndex() メソッドはcollModのラッパーです 管理コマンド(下記)。

    collMod コマンド

    collMod 管理コマンドを使用すると、コレクションにオプションを追加したり、ビュー定義を変更したりできます。

    hidden: falseを渡すことで、インデックスを再表示するために使用できます。 :

    例:

    db.runCommand( {
       collMod: "pets",
       index: {
          name: "type_1",
          hidden: false
       }
    } )

    結果:

    { "hidden_old" : true, "hidden_new" : false, "ok" : 1 }

    これにより、unhideIndex()と同じドキュメントが返されます。 戻ります。

    unhideIndex()に似ています 、インデックス名またはそのキーパターンを指定するオプションがあります。

    キーパターンの使用例は次のとおりです。

    db.runCommand( {
       collMod: "pets",
       index: {
          keyPattern: { "type" : 1 },
          hidden: false
       }
    } )

    この場合、インデックスは{ "type" : 1 }を使用して定義されました。 、したがって、この定義をインデックス名の代わりに使用できます。

    変更を確認する

    変更を確認するために、getIndexes()を呼び出すことができます もう一度インデックスの定義を確認してください:

    db.pets.getIndexes()

    結果:

    [
    	{
    		"v" : 2,
    		"key" : {
    			"_id" : 1
    		},
    		"name" : "_id_"
    	},
    	{
    		"v" : 2,
    		"key" : {
    			"weight" : -1
    		},
    		"name" : "idx_weight_-1"
    	},
    	{
    		"v" : 2,
    		"key" : {
    			"type" : 1
    		},
    		"name" : "type_1"
    	}
    ]

    予想どおり、両方のインデックスが非表示になっています。 hidden: trueを渡すことで、それらを再び非表示にすることもできます 。

    インデックスを非表示/再表示できませんか?この設定を確認してください。

    mongod featureCompatibilityVersion 少なくとも4.4である必要があります インデックスを非表示にする前に。ただし、一度非表示にすると、featureCompatibilityVersionを使用してもインデックスは非表示のままになります MongoDB4.4バイナリでは4.2に設定されています。

    featureCompatibilityVersionを確認できます 次のコードで設定します:

    db.adminCommand( 
        { 
            getParameter: 1, 
            featureCompatibilityVersion: 1 
        } 
    )

    setFeatureCompatibilityVersionを使用して設定できます コマンド:

    db.adminCommand( { setFeatureCompatibilityVersion: "4.4" } )

    setFeatureCompatibilityVersion コマンドはadminで実行する必要があります データベース。

    また、_idを非表示にすることはできません。 インデックス。


    1. Linux環境をMongoDB用に最適化する

    2. RedisCloud DBのデータをリモートで検査するにはどうすればよいですか?

    3. Laravel + predis+Redisクラスター-移動/127.0.0.1:6379への接続なし

    4. Microsoft.Extensions.Cashing.RedisとMicrosoft.Extensions.Caching.StackExchangeRedis.RedisCacheの違い