2016-07-13 18 views
2

私はfindクエリを持っています。ここでは、ドキュメント上の配列に要素があるかどうかを調べる必要があります。私は、クエリの最適化の配列のサイズをインデックスしたいと思いますが、私はそのようなインデックスを作成する方法がわかりません。MongoDBで配列の長さのインデックスを作成する方法は?

私はMongoDBのC#のドライバを介してフィルタを作成しました:

Builders<Post>.Filter.And(new List<FilterDefinition<Post>>() 
{ 
    Builders<Post>.Filter.Eq(x => x.Category, Category.COLLECTION), 
    Builders<Post>.Filter.SizeGt(x => x.Details.References, 0) 
}) 

文書型は次のようになります。

{ 
    "_id" : ObjectId("577a271f2b365917c4d72678"), 
    "UserId" : ObjectId("577a26a32b365917c4d67e42"), 
    "Category" : NumberInt(4), 
    "Details" : { 
     "_id" : ObjectId("577a271f2b365917c4d72677"), 
     "References" : [ 
      { 
       "RefId" : ObjectId("577a887b4fd1ae0e1c7b2035"), 
       "Order" : NumberInt(0), 
       "RefType" : NumberInt(1) 
      } 
     ] 
    }, 
    "Modified" : ISODate("2016-07-05T01:26:33.549+0000"), 
    "IsActive" : true 
} 

クエリは次のようになります。

{ 
    "query" : { 
        "find" : "post", 
        "filter" : { 
            "UserId" : { 
                "$in" : [ 
                    ObjectId("577a26a12b365917c4d67dd5"), 
        ObjectId("577a26a12b365917c4d67dd3") 
                ] 
            }, 
            "IsActive" : true, 
            "$or" : [ 
                { 
                    "Category" : NumberInt(4), 
                    "UserId" : { 
                        "$nin" : [ 

                        ] 
                    }, 
                    "Details.References.0" : { 
                        "$exists" : true 
                    } 
                }, 
                { 
                    "Category" : { 
                        "$ne" : NumberInt(4) 
                    } 
                } 
            ], 
            "Modified" : { 
                "$lt" : ISODate("2016-07-04T13:59:32.094+0000") 
            } 
        }, 
        "sort" : { 
            "Modified" : NumberInt(-1) 
        }, 
        "limit" : NumberInt(10) 
    }, 
    "time" : NumberInt(33), 
    "docsScanned" : NumberInt(1125) 
} 

として、あなたはそれが正しいものを見つけるためにかなりの数の文書(1125)をスキャンするのを見ることができます。私はさらに、この数を削減したいと思いますが、私はどのようにこの部分インデックスにはわからない:

"Details.References.0" : { 
    "$exists" : true 
} 

がどのように参照の長さのためにインデックスを作成するのですか?

答えて

2

モンゴーインデックスはまだこのような機能を提供していません。

配列のサイズを格納するには、配列arraySizeを持ち、その配列の変更ごとに手動で更新できるソリューションとして、arraySizeにフィールドインデックスを作成します。

関連する問題