确保Collection._ensureIndex以正确的顺序传递字段

时间:2013-07-29 19:28:30

标签: javascript mongodb indexing meteor compound-index

mongo索引文档说,对于复合索引,字段的顺序非常重要:索引只能使用字段的任何前缀支持查询:http://docs.mongodb.org/manual/core/indexes/

Meteor目前在服务器端传递给MongoDB的ensureIndex Collection._ensureIndex

但是,在Javascript中将参数传递给Collection._ensureIndex时,这些字段将变为Javascript对象。我们是否保证Mongo会以相同的顺序阅读它们?如果没有,设置此索引的正确方法是什么?

这可能与JS对象的存储方式有关。它们是关联数组,还是按顺序保留它们的属性?

2 个答案:

答案 0 :(得分:2)

Javascript没有指定对象上参数的顺序,但V8至少对node.js这样做,参数始终按照它们添加到对象的顺序。

所以,如果你这样做

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

返回

[ 'a', 'b', 'c' ]

答案 1 :(得分:1)

不要担心这个,这应该可以正常工作。您可以通过检查MongoDB shell上的索引来轻松查看它是否有效:

mongo yourdb
db.collectionName.getIndexes();