首页 > 解决方案 > MongoDB 分片路由器是否操纵 $in 查询?

问题描述

有一个名为“items”的集合,它由 3 个分片分片

每个分片有 3 个文档

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

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

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

标签: mongodbmongodb-query

解决方案


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

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

对分片键字段的索引扫描应该足够快,以至于操作查询甚至都不是必需的,无论如何!


推荐阅读