2013-07-29 48 views
2

蒙戈索引文档中说,对于复合索引,该字段的顺序是非常重要的:​​确保Collection._ensureIndex通过正确的顺序领域

:索引只能使用字段的任何前缀支持查询

流星目前在服务器端有一个传递到MongoDB的ensureIndex作为Collection._ensureIndex

但是,在Javascript中将参数传递给Collection._ensureIndex时,这些字段会变成Javascript对象。我们有任何保证Mongo会以相同的顺序阅读它们吗?如果没有,建立这个指数的正确方法是什么?

这可能与如何存储JS对象有关。他们是一个关联数组,还是他们保持其属性的顺序?

回答

2

JavaScript不指定对象的参数排序,但V8这样做至少node.js的参数是总是按照它们添加到对象的顺序。

所以如果你做

var a = {a:1, b:1, c:1} 
var keys = Object.keys(a) 

回报

[ 'a', 'b', 'c' ] 
+0

只是想要注意'c','b','a''也会以相同的顺序出现。这并不是说按键在这里是按字母顺序排列的。 –

1

不要担心这个,这应该很好。你可以很容易地看到是否它的工作通过检查该指标上有MongoDB的外壳太:

mongo yourdb 
db.collectionName.getIndexes(); 
+0

当然,我可以检查,但你可以解释为何它 “应该正常工作”? –

+0

因为否则你无法从Node正确创建索引...并且我们会想出更好的API ;-) – Derick

+0

Derick:那么http://stackoverflow.com/q/5525795/586086? –