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

Red*_*dro 18 javascript indexing object mongodb

MongoDB的文件中指出:

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

但ECMAScript定义了一个对象如下:

对象是Object类型的成员.它是一个无序的属性集合,每个属性都包含一个原始值,对象或函数.

使用MongoDBnode.js(例如使用此模块),您使用的是服务器端javascript,如下例所示.

当MongoDB期望object(AKA无序的属性集合)时,如何指定序列?

collection.ensureIndex({
    date    : -1,
    client  : 1,
    product : 1
});
Run Code Online (Sandbox Code Playgroud)

drm*_*ror 10

在MongoDB中,文档中的字段的顺序确实是显著,所有的语言驱动程序提供指定的方式,即使底层的编程语言并没有这样的概念文件的一种手段.

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

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

  • V8引擎确实保留了排序,尽管它在标准中被定义为无序.这是一个目前似乎处理得很好的灰色区域(因为所有环境基本上都保留了排序),但将来可能需要更加仔细地查看. (3认同)
  • 鉴于规范,对于如此广泛使用的软件来说,这似乎是一个危险的假设。API 是否允许您使用数组而不是对象,只是为了确保将来安全? (2认同)