2016-12-03 20 views
0

我有一个包含这样的数据seeds.js文件:为什么Mongoose(MongoDB)在保存后重新排列我的数组?

var newBus = new Bus({ 
    am: { 
    route: [ 
     { 
     coords: {lat: 35.645329, lng: -84.068154}, 
     address: "5408 Hutton Ridge Rd" 
     } 
    } 
} 

,当我打电话

newBus.save(function(err, data) { 
    if (err) throw err; 
    else console.log(data); 
}); 

它存储的是这样的:

"am" : { 
    "route" : [ 
     { 
      "address" : "5408 Hutton Ridge Rd", 
      "coords" : { 
       "lng" : -84.068154, 
       "lat" : 35.645329 
      } 
     } 
    ] 
} 

我只是注意到它将lat, lng的顺序改为lng, lat。我不认为这是重要的,但是当我对种子数据进行更新时,更新仅在找到匹配特定lng, lat的数组时才起作用。当我试图找到与lat, lng匹配时,它不起作用。

那么为什么MongoDB/Mongoose重新排列数据?

回答

0

这不是一个数组,它是一个字典(javascript中的对象)。这不会存储任何订单。据说在文档中。

你可以阅读更多关于它在这里:http://www.ecma-international.org/publications/files/ECMA-ST-ARCH/ECMA-262,%203rd%20edition,%20December%201999.pdf(4.3.3节)

它说:

对象

一个目的是Object类型的成员。它是一个无序 属性的集合,每个属性都包含一个原始值, 对象或函数。存储在对象属性中的函数是 ,称为方法。

+0

好的,这是有道理的。但显然,MongoDB不会随机存储它,而lng,lat不是按字母顺序排列的,为什么它最终会以这种方式排序呢? –

+0

我想更大的问题是,我应该依赖它作为lng,lat如果它不总是以这种方式排序? –

+0

我不是MongoDB主题的专家,但你可以检查这个问题:http://stackoverflow.com/questions/18514188/how-can-you-specify-the-order-of-properties-in-a-javascript -object-for-a-mongodb看起来作者很担心和你一样的东西 – Morishiri

相关问题