我有大型 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:在较小版本的集合上解释():
{
"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"
}