2015-08-15 67 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

这就是我已经告诉过你的。 “分散聚集”意味着出现在包含数据的每个分片(“分散”),然后将所有数据重新聚合在一起(“聚集”)。当然,如果所有块都在一个碎片上,向不包含数据的碎片发送查询请求没有意义。 –