我为mongo集合创建了一个复合分片键: {catalog_id:1,CATEGORY_ID:1}
现在如果我只通过保证唯一的catalog_id查询集合,查询是否会转到所有分片?
答案 0 :(得分:1)
通常,查询将转到包含该查询的相关块范围的任何分片。在您的情况下,如果确实确保catalog_id是唯一的,那么您将不会有相同catalog_id范围的多个块(例如,您将没有一个范围为{catalog_id:12,category:“a”}的块到{catalog_id:12,category:“m”},以及另一个范围{catalog_id:12,category:“n”}到{catalog_id:12,category:“z”}的块,因为你只能有一个文档使用{catalog_id:12},并根据现有文档创建块范围)。
因此,在您的情况下,查询应该转到单个分片。
答案 1 :(得分:0)
在mongo db中,如果在多个字段上有复合索引,则可以使用它来查询字段的起始子集。所以如果你有一个索引
a,b,c
你可以在
上使用它查询a
a,b
a,b,c
不确定shardng是否以相同的方式工作。