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
}
がどのように参照の長さのためにインデックスを作成するのですか?