2011-02-22 21 views
1

のインナーアイテムIがダイナミックアレイ・ストレージ・キー、値、dynamicArrayでタイプを使用。 MongoDB/C#は、一般的にdb.contents.ensureIndex({dynamicArray:1})のような配列のインデックスを使用します。 30または40以上の要素を格納すると、このメソッドを使用して索引付けするための大きな情報が生成されます。別の方法では、完全な配列ではなく、この配列のitemsキーでインデックスを格納します。何かのような - >インデックスキー:名前、インデックスキー:すべてではなく、都市。MongoDBのC#の配列のインデックスまたはインデックス付け配列

dynamicArray: 
{ 
    item : { Key: "Name", Value: "Peter", Type:String } 
    item : { Key: "Age", Value: "18", Type:int } 
    item : { Key: "City", Value: "San Jose", Type:String } 
    ...30 to 40 items. 
} 

答えて

2

ようなもの - >インデックスキー:名前、インデックスキー:すべてではなく、すべてです。

特にこれを行うことはできません。キーの値にインデックスを付けることはできません。

一つの解決策

しかし、あなたは、配列内のアイテムのインデックスをすることができます。

のは、あなたのデータは次のようになりますと仮定しましょう:

items: 
    [ 
     { Key: "Name", Value: "Peter", Type:String }, 
     { Key: "Age", Value: "18", Type:int }, 
     { Key: "City", Value: "San Jose", Type:String }, 
     ...30 to 40 items. 
    ] 

あなたはどうなるitems.Keyに索引を作成するには、次

db.foo.ensureIndex({ 'items.Key' }) 

あなたはインデックスを使用します次の操作を行います。

db.foo.find({ 'items.Key' : "City", 'items.value' : "San Jose" }) 

これにより、検索範囲がh ave Key = "City"。これがすべてであれば、これはおそらく役に立たないでしょう。

代替ソリューション

なぜitems配列ですか?

items: 
    { 
     "Name" : { Value: "Peter", Type:String }, 
     "Age" : { Value: "18", Type:int }, 
     "City" : { Value: "San Jose", Type:String }, 
     ...30 to 40 items. 
    } 

今、あなたはあなたが最初の場所で探していたものですitems.City.Valueにインデックスを、次のことができます。あなたはこのようなデータを構造化することはできません。これにより、データ構造もかなり小さくなります。

は、データの性質に応じて、また、あなたのインデックスのサイズを制御するのを助けるためにsparse indexesを見てみたいことがあります。

0

申し訳ありませんが、mongoDBは条件によって部分的にインデックスを作成することはできません。

+0

は明らかにこれは古いですが、MongoDBはhttp://docs.mongodb.org/manual/core/index-multikey/アレイ上の条件付きのインデックスをサポートしています – AaronHS

関連する問題