2015-08-15 71 views
1

如果我在分片密鑰中使用MongoDB shurded cluster:「my_key」。 我必須在收集包文件(約10-500項)中找到不同的my_key。 敵人例如:

db.test.find({my_key:{$中:[1,3,5,67,45,56 ...]}})

Mongos知道存儲與「塊my_key'存儲。 mongos可以將我的查詢分割爲小的查詢,以確切地存儲文檔的分片嗎?或者mongos會把這個查詢發送給所有的碎片?

而同樣的問題大約$或

db.test.find({$或:[{my_key:1},{my_key:3},{my_key:5} ...]})

+0

這兩個查詢是一回事。那麼你的問題是什麼?這是否會將碎片聚集在一起? –

+0

不,我的問題是有多少分片會涉及查詢執行。 – dhythhsba

+0

這很有趣,因爲你的問題的標題是* $,VS $或*。主要答案是*「沒有區別」*。 –

回答

2

我已經運行測試。

如果$ in僅包含來自一個分片的值,mongos將發送SINGLE_SHARD查詢。

如果$ in包含來自多個分片的值,那麼mongos將只發送SHARD_MERGE查詢,僅用於包含所需數據(不是全部集羣)的分片。

+0

這就是我已經告訴過你的。 「分散聚集」意味着出現在包含數據的每個分片(「分散」),然後將所有數據重新聚合在一起(「聚集」)。當然,如果所有塊都在一個碎片上,向不包含數據的碎片發送查詢請求沒有意義。 –