如何为node.js中的MongoDB索引指定javascript对象中属性的顺序?

如何为node.js中的MongoDB索引指定javascript对象中属性的顺序?,javascript,mongodb,object,indexing,Javascript,Mongodb,Object,Indexing,各国: 对于具有多个键的索引(即复合索引)字段顺序很重要。 但ECMAScript对对象的定义如下: 对象是类型对象的成员它是一个无序的属性集合,每个属性都包含一个基本值、对象或函数 在node.js中使用MongoDB时(例如通过使用),您使用的是服务器端javascript,如下例所示 当MongoDB需要一个对象(又称无序属性集合)时,如何指定序列 在MongoDB中,文档中字段的顺序确实很重要,所有语言驱动程序都提供了一种以这种方式指定文档的方法,即使底层编程语言没有这样的概念 Mong

各国:

对于具有多个键的索引(即复合索引)字段顺序很重要。

但ECMAScript对对象的定义如下:

对象是类型对象的成员它是一个无序的属性集合,每个属性都包含一个基本值、对象或函数

node.js
中使用
MongoDB
时(例如通过使用),您使用的是服务器端javascript,如下例所示

当MongoDB需要一个
对象
(又称无序属性集合)时,如何指定序列


在MongoDB中,文档中字段的顺序确实很重要,所有语言驱动程序都提供了一种以这种方式指定文档的方法,即使底层编程语言没有这样的概念

MongoDB在其shell中使用的文档格式类似于JSON,但不是严格的JSON。除其他外,字段的顺序始终保持不变


在Javascript中,标准将字段定义为无序,因此实现可以自由忽略/不保留顺序。但是在实践中,所有实现都保留了顺序。特别是
V8引擎
保留了排序,这是
node.js
中使用的引擎,因此没有问题。

我不会担心JavaScript的“无序”属性,因为它们为shell实现了自己的js版本。尝试
show dbs
,您就会明白我的意思。对不起,我忘了提到Node.js(javascript)作为脚本语言。实际上,属性不一定像ECMA规范规定的那样无序()。在Chrome和IE 10中,关键顺序是一致的。如果一个新的对象文本在所有主要实现中都是这样的,我也不会感到太惊讶。不过,依靠这种行为发布代码似乎很疯狂。在Chrome中,如果我删除一个属性并将其替换,则键顺序会发生变化。在IE10中没有。我忘了提到这是关于在
Node.js
中使用
MongoDB
,这是服务器端javascript。所以我担心的不是Mongo内部如何处理它,而是javascript部分。V8引擎确实保留了有序性,尽管在标准中它被定义为无序。这是一个灰色区域,目前似乎处理得足够好(因为所有环境基本上都保持有序),但将来可能需要更仔细地观察。一些测试表明,V8确实一直保持着这种有序。你应该将你的评论编辑到你的答案中,我会接受的。考虑到规范,对于如此广泛使用的软件来说,这似乎是一个危险的假设。API允许您使用数组而不是对象,只是为了确保将来的安全吗?@download根据,非数字名称的顺序保持不变。如果您不想依赖,node.js驱动程序还允许使用
coll.ensureIndex([[a:1],[b:-1]],cb)]
语法。
collection.ensureIndex({
    date    : -1,
    client  : 1,
    product : 1
});