2013-02-07 82 views
0

我有獨特的文件索引非唯一鍵。什麼使得這個文件是唯一的,是文件中多個鍵的組合。例如:僅當多個匹配時才比較其他字段?

{ 
    first: 'John', 
    last: 'Foo' 
} 
{ 
    first: 'Henry', 
    last: 'Bar' 
} 
{ 
    first: 'Frank', 
    last: 'Foo' 
} 
{ 
    first: 'John', 
    last: 'Bar' 
} 

因此,根據上面的例子:如果我們想要查詢的Frank頭名,我們只會得到一個結果。理想情況下,由於我們只有一個結果,我們甚至不需要將姓氏與我們的查詢進行比較。但是,如果我們查詢名稱爲John,我們會得到兩個結果,所以我們需要比較次要參數。

在Mongo中如何實現這種查詢風格?目標只是爲了節省不必要的比較,如果只有一場比賽開始。

請注意,我知道這種查詢風格不保證正確的文檔。它假定主要字段和每個後續字段匹配「足夠好」來驗證文檔的身份,如果只有一個文檔匹配,則爲。雖然如果還有其他不太明顯的原因,爲什麼不應該使用這種方法,通過一切手段討論:)

+0

添加'limit(1)'和'sort()'參數的任何原因都不起作用? –

+0

如果找到多個匹配項,'limit(1)'不會匹配第二個/ etc參數,所以您將無法通過不正確的匹配進行篩選。至於'sort()',我不這麼認爲..雖然也許有一些用法,我不熟悉 –

+0

所以你試圖阻止MongoDB檢查'last ='Foo ''弗蘭克'案中,純粹是出於性能原因? – JohnnyHK

回答

0

我不會擔心這一點,尤其是如果你有一個這樣的指數。第一個,最後一個複合索引只會掃描以「first」開頭的索引元素。如果這是一個文件,那麼它停止。如果你還需要匹配「最後」,那麼它將掃描索引的那些部分。

+0

>如果你還需要匹配「最後」,那麼它將掃描索引的那些部分。 <聽起來好像你在描述我提出的問題,以及另一種「完全比較」查詢。你能舉兩個例子嗎?或者,也許給我的名字/搜索你引用的查詢類型? :) –

+0

「完全比較」查詢在索引中根本不值得擔心......我會盡力在週末提出一個很好的例子 – Derick

相關問題