大規模な mongodb コレクション (530 万エントリ) があり、各エントリにはリスト フィールドといくつかの追加フィールドがあります。例えば:
{ "_id" : ObjectId("518d51c808beda0b70cffffa"),
"a" : [ 0.00037, 0.00009 ],
"b" : "Some long str",
"c" : [ "element1", "element2", "element3" ]
}
フィールドにインデックスがc
あり、それを検索したい。さらに、このリストのすべての順列で検索したい。たとえば、上記のオブジェクトを query の検索結果に含めたい"c": ["element3", "element2", "element1"]
。
私はこのようにpymongoを使用します:
from itertools import permutations
...
query = ['element1', 'element2', 'element3']
query_permutations = list(permutations(query, len(query)))
results = collection.find({"c": {"$in": query_permutations}}).sort("a", -1)
速くする方法はありますか?
UPD:コレクションの小さいバージョンでの Explain() :
{
"cursor" : "BasicCursor",
"isMultiKey" : false,
"n" : 11053,
"nscannedObjects" : 11053,
"nscanned" : 11053,
"nscannedObjectsAllPlans" : 11053,
"nscannedAllPlans" : 11053,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 0,
"nChunkSkips" : 0,
"millis" : 41,
"indexBounds" : {
},
"server" : "machine.local:27017"
}