你是对的,mongodb 不能保证跨分片集群的索引的唯一性,因为每个分片不能报告它是否包含要插入的键在它们的上下文中是唯一的。
文档中对此进行了介绍,并且针对这种情况有许多策略。
结果是,如果为分片键选择这样的键,您将需要您的应用程序层来强制分片键的唯一性。
我不是 100% 清楚你的第二个问题指的是什么。除了分片键之外,您可以在集合上创建索引,这些可用于提高查询性能,但任何不使用分片键的查询都将是分散/聚集的(因此会命中每个分片)。他们命中每个分片时的性能将取决于索引的好坏,这是拥有除分片键之外的索引的好处。