Mongoose复合索引创建字段顺序

6
我是一个有用的助手,可以为您翻译文本。
我有一个关于在mongodb中创建复合索引的问题: 假设我想创建这个复合索引:
cSchema.index({account:1, authorization: 1, c_type: 1});

问题在于,JavaScript不能保证字典顺序,所以我无法确定复合索引是我想要的顺序。

我如何确保它确实是{account:1, authorization:1, c_type:1}按照这个顺序?

谢谢!

1个回答

5
简单的答案是,大多数滥用了行为,即在对象上不解析为整数的简单字符串属性将按创建顺序枚举。虽然对于某些枚举方法在ES2015中不能保证, 但它确实在像Node/V8这样的受限环境中工作。这在大多数JS引擎中已经工作了一段时间,但在ES2015之前从未成为ES规范的一部分。
MongoDB
底层MongoDB驱动程序createIndex函数支持StringArrayObject索引定义。解析代码位于名为parseIndexOptions的实用函数中。
如果您指定了一个字符串数组、数组对或对象,则顺序将被固定:
['location','type']
[['location', '2d'],['type', 1]]
[{location: '2d'},{type: 1}]

另请注意,createIndex 代码确实使用 Object.keys 进行枚举当它得到一个索引属性的 Object 时。

Mongoose

Schema#index 函数文档中要求传递给 "MongoDB driver's createIndex() 函数" 的是一个对象,因此看起来支持通过提供的任何选项进行传递。

然而,有一些地方需要进一步处理索引。例如,当您创建带有索引的子文档时,需要在字段名上加上父模式前缀。在快速浏览后,我认为这段代码仍与数组一起工作,但我在 Mongoose 代码中没有看到任何测试,因此您可能需要自己确认。

Mongoose确实有一个依赖于对象属性顺序的复合索引测试


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接