MongoDB定义复合索引时如何保留对象内字段的排序顺序?
MongoDB复合索引字段顺序保留机制解答
复合索引中列出的字段顺序至关重要。索引首先按item字段的值对文档引用进行排序,同一item字段值的范围内再按stock字段的值排序。
- MongoDB服务端的索引逻辑完全独立于客户端JS的特性,字段排序规则由服务端严格按照接收的字段顺序执行,本身不存在顺序不可靠的问题。
- JS端的MongoDB驱动做了专门的兼容处理,规避JS旧版本对象键顺序不可靠的问题:
- 驱动支持用有序二维数组定义复合索引,写法为
[ ["item", 1], ["stock", 1] ],数组天然保证顺序,完全避开对象键顺序的问题,也是官方推荐的兼容写法。 - 针对ES6及以上版本的JS环境,字符串、Symbol类型的对象键已经可以稳定保留插入顺序,正常按
{ item: 1, stock: 1 }的顺序定义索引对象,驱动也能正确读取字段顺序传递给服务端。
- 驱动支持用有序二维数组定义复合索引,写法为
- 服务端收到索引创建请求后,会严格保留客户端传递的字段顺序构建B树索引,不会出现字段顺序错乱的情况。
内容的提问来源于stack exchange,提问作者david_adler
相关产品推荐
相关产品推荐

