MongoDB索引的一般规则是在“高选择性”字段上创建索引。例如,对唯一ID的索引具有很高的选择性,而对布尔值或枚举字段的索引则可能具有很高的“低选择性”。
我有一个用例,其中记录具有“状态”字段,其中包含以下可能的值:进行中,已完成,声明,已声明。
我的服务器上有一些逻辑循环运行:
当前,我没有关于“状态”的索引。当我执行“查找下一个”操作时,将进行收集扫描。因为我做了一个“ findOne”,所以我猜测/希望它在找到第一个匹配项后立即返回。将来,我可能需要将其更改为“ findMany”以分批处理,而不是一次处理。
在这种情况下,我感到不得不在“状态”上添加索引,但是我有冲突。一方面,这是一个选择性很低的字段(只有4个可能的值)。另一方面,感觉有了索引对于这种“获取下一个”行为会更有效。
对MongoDB有经验的人对此有意见吗?我在其他地方读过,做这种事情的另一种方法是对每个状态使用多个集合-在这里看起来更好吗?我还有其他选择吗?