如果我有一個指數{"category": 1}
和文檔{"category": {type: "memory", class: "DDR400"}
,我該怎麼辦這樣的查詢爲使用我的索引{"category.type": "memory"}
?
龍版本:
隨着MongoDB中,我想使用嵌入式文件作爲索引的關鍵。
例如,我可能有一些文件,如這(爲一個虛構的產品數據庫):
{"category": {"type": "hard-drive", "form_factor": "2.5in", "size": "500GB"}, ...}
{"category": {"type": "hard-drive", "form_factor": "3.5in", ...}, ...}
{"category": {"type": "memory", "class": "DDR400", ...}, ...}
對於上面這個例子,我可能要執行的查詢,如:
{"category.type": "hard-drive"}
{"category.type": "hard-drive", "category.form_factor": "2.5in"}
{"category.type": "memory"}
{"category.type": "memory", "category.class": "DDR400"}
我的問題是創建一個索引。文檔http://www.mongodb.org/display/DOCS/Indexes#Indexes-DocumentsasKeys描述了兩個選項:
第一個選項是創建一個複合索引,例如{ "category.type": 1, "category.class": 1 }
。這不適合我的情況,因爲我可能有許多不同類型的子類別。
第二個選項是使用文檔作爲關鍵字:{ "category": 1 }
。現在查詢如{"category": {"type": "memory", "class": "DDR400"}}
將使用該索引,但{"category": {"type": "memory"}}
將不會返回任何內容,並且{"category.type": "memory"}
不會使用該索引。有沒有辦法使用這個索引來進行查詢,這會得到與{"category.type": "memory"}
相同的結果?
我懷疑使用像{"category" {"$gt": ..., "$lt": ...}
這樣的查詢應該工作,但我應該在那裏的空白處?
我的問題是,我可能有內部類許多不同的密鑰,我無法爲它們中的每一個創建索引。我總是從左到右查詢嵌入式文檔中的鍵(因此不只是最後一個鍵)。 – Ralf
您使用$ gt和$ lt的解決方案似乎可行,但在哪些情況下可能會中斷? – Ralf
您只需要在要查詢的鍵上創建索引。如果可以有多種組合,查詢「從左到右的按鍵」可能也不太適用。考慮{a:1,b:1,c:1} vs {a:1,c:1} vs {b:1,c:1}。您無法查詢a,b,c與這些文件的所有組合。 – Thilo