MongoDB分片路由器是否在查询中操作$?

时间:2018-05-15 02:34:27

标签: mongodb mongodb-query

这是一个名为' items'用3个碎片分片

每个碎片都有3个文件

  • ID为1的文档 - >属于shard1
  • ID为2的文档 - >属于shard2
  • ID为3的文档 - >属于shard3

当我查询路由器(mongos)时:items.find({id:{$ in:[1,2,3]}})

路由器是否操纵每个分片的查询? ex)items.find({id:{$ in:[1]}})=>路由查询到shard1

我想知道路由器是否只检测到映射分片或修改分片的查询

1 个答案:

答案 0 :(得分:1)

据我所知,查询不会以任何方式被操纵。相反,查询被路由到任何可能包含基于查询的分片键部分的相关数据的分片。在查询不包含分片键的情况下,查询将路由到所有分片。

例如,如果您在id字段上进行分片,则items.find({id: { $in: [1,2,3] }})将发送到shard1shard2shard3,而{{1}只会被发送到items.find({id: { $in: [1] }})。此外,查询shard1将发送到items.find({ref_id: { $in: [1] }})shard1shard2以及群集中可能包含的任何其他分片。

分片键字段上的索引扫描应该足够快,无论如何都不需要操纵查询!