mongo索引文档说,对于复合索引,字段的顺序非常重要:索引只能使用字段的任何前缀支持查询:http://docs.mongodb.org/manual/core/indexes/
Meteor目前在服务器端传递给MongoDB的ensureIndex
Collection._ensureIndex
。
但是,在Javascript中将参数传递给Collection._ensureIndex
时,这些字段将变为Javascript对象。我们是否保证Mongo会以相同的顺序阅读它们?如果没有,设置此索引的正确方法是什么?
这可能与JS对象的存储方式有关。它们是关联数组,还是按顺序保留它们的属性?
答案 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();