2011-06-29 126 views
6
db.hello.ensureIndex({"array1":1, "array2":1}) 

MongoDB不允許這樣做,因爲他們說「它可以失控」。但是,我知道我的數組永遠不會超過3的長度。我如何破解MongoDB以允許一次爲多個數組建立索引?如何在MongoDB中爲兩個數組建立索引?

當使用複合索引,索引值的至多 一個任何文件 中可以是一個數組。因此,如果我們有一個 索引{一個:1,B:1},以下 文件都好:

{一:[1,2],B:1} {A:1,B: [1,2]} 本文檔,但是,將不能 被插入,並顯示錯誤消息 「不能索引平行陣列」:

{一:[1,2],b:[1,2 ]}帶索引並行數組的問題 的笛卡爾乘積中的每個值都必須是 索引,這可以非常快地失控 。

+0

你確定你需要兩個數組的索引嗎?如果你對其中之一有很高的選擇性,那可能就足夠了。 – Thilo

+0

@Thilo ...第一個數組通常有大約100個元素。第二陣列有大約2-3個元素。你認爲我需要索引第二個數組嗎? – TIMEX

+1

@TIMEX請勿索引第2個數組,並使用explain命令查看它的執行方式。 – Joe

回答

2

您的問題的簡短答案是;你沒有。唯一可用的選項是將每個唯一對存儲爲單個數組元素。因此,而不是:

{a:[1,2], b[8,9]} 

您存儲

{ab:[[1,8], [1,9], [2,8], [2,9]]} 

顯然,這有幾個缺點所以它真的取決於你的特定用例,這是否是一個合適的解決辦法。不過,我同意mongo不應僅僅爲了防白癡而拒絕多個數組索引。對於小/低基數陣列來說,這是一個很好的功能。