我有以下格式在MongoDB中收集數據:MongoDB的嵌入文檔索引問題
{
_id: ObjectId,
Product: string,
Modules: [
{
StaticModuleId: Int64,
Set: [
{
k: Int64,
v: {
Value: Double,
AnotherId: Int64
}
},
...
]
},
...
]
}
這裏是我的命名MyIndex指數:
{
Product: 1,
'Modules.StaticModuleId': 1,
'Modules.Set.k': 1,
'Modules.Set.v.Value': 1
}
在收集5文檔,每個文檔有10個模塊和100個元素,每個集合中共有50個模塊和5000個條目。然後我跑這個查詢:
{
'Product': 'Test',
$and: [
{
'Modules.StaticModuleId': 2010220,
'Modules.Set': {
$elemMatch: {
k: 41439,
'v.Value': 2186233
}
}
},
{
'Modules.StaticModuleId': 2010226
},
{
'Modules.StaticModuleId': 2010228
}
]
}
這裏是.explain():
{
cursor: 'BtreeCursor MyIndex',
isMultiKey: true,
n: 4,
nscannedObjects: 941,
nscanned: 941,
nscannedObjectsAllPlans: 941,
nscannedAllPlans: 941,
scanAndOrder: false,
indexOnly: false,
nYields: 0,
nChunkSkips: 0,
millis: 52
}
至於我繼續添加額外的$ elemMatch子句中的性能降低到> 200毫秒。這種類型的查詢是否可索引,如果有的話,有關我如何提高性能的想法?
爲什麼你有$和表達呢?爲什麼不列舉用','分隔的所有條件? – 2013-04-23 03:53:19
我認爲在嘗試在一個元素內部索引時會出現問題,請參閱http://stackoverflow.com/questions/10207448/mongodb-indexes-for-elemmatch IMO,您可能需要考慮讓您的模塊成爲第一類公民。 – Fatmuemoo 2013-04-23 04:50:25