0

現在、次のように設定されたコレクションの 1 つに地理空間フィールドのインデックスがあります。

collection.ensureIndex({ loc : "2d" }, { min : -10000 , max : 10000,
    bits : 32, unique:true}

ただし、インデックスにもう 1 つのフィールドを含めたいので、ユース ケースの 1 つで対象となるインデックス クエリを利用できます。複数のフィールド (複合インデックス) を持つ ensureIndex は次のようになります。

collection.ensureIndex( { username : 1, password : 1, roles : 1} );

質問は - 最小/最大パラメータを保持するために、追加フィールドを使用して最初のインデックス仕様を作成するにはどうすればよいですか? つまり、最小/最大/ビットがインデックス フィールドの 1 つだけに適用されるように指定するにはどうすればよいでしょうか? これまでの私の最良の推測は次のとおりです。

collection.ensureIndex({ loc : "2d", field2 : 1 },
    { min : -10000 , max : 10000 , bits : 32, unique:true}

しかし、これが正常に機能するという自信はありません。

アップデート:

こちらのドキュメントに詳細がありますが、この場合の最小/最大を指定する方法はまだ明示されていません。

4

1 に答える 1

0

db.collection.getIndexes() は、インデックスの構築に使用されるパラメーターを提供する必要があります。最小/最大/ビット フィールドは、「2d」フィールドにのみ適用されます。

getIndexes() 以外にこれらのパラメーターを確認する方法はありませんが、同じ場所/フィールドのペアを挿入することが許可されていないこと、および境界外に loc を挿入することが許可されていないことを簡単に確認できます (ただし、field2 は可能です)。何にでもなる)。ビット設定を直接確認するのは困難ですが、ビット設定を非常に低く設定し、近くのポイントが一意のキー違反をトリガーすることを確認することで間接的に確認できます。

于 2012-08-20T16:14:33.780 に答える