0

我正在尝试将地理空间数组保存到架构中。这是我的架构(我使用的是 Moongose + Express + NodeJS):

var Route = new schema({
    route: String,
    time: Number,
    distance: Number,
    geo: {type: [Number], index: '2d'},
    created: { type: Date, default: Date.now }
}, {collection: 'route'});
var routeModel = mongoose.model('Route', Route);

这是我发送以填充该模式的实例的数据示例:

{ 
    distance: 6.899893863658173,
    geo:[ [13.695901, -89.24937], [13.706500876975248, -89.24967010761316], 
          [13.711430396814366, -89.2561502488519] ],
    route: "Running route",
    time: 31
}

第一个菜鸟问题是:有可能做我正在做的事情吗?在地理中发送数组数组?

这是我保存数据的方式:

socket.on('new_route', function (data){
   var route = new routeModel();
   route.route = data.route;
   route.time = data.time;
   route.distance = data.distance;
   route.geo = data.geo;
   route.save(function(err) {
       if (err) throw err;
       socket.emit("route_saved", {mensaje: "Well done!"});
       app.listen(8080);
   });  
});

如果我在地理上发送并清空数组,一切正常。但是,我收到以下错误

"Cast to number failed for "13.695901, -89.24937, 13.706500876975248, -89.24967010761316..." at path "geo".

每当我在“geo”上发送一个数组(如上面发布的)时。

所以第二个问题,关于为什么我的阵列像一根大绳子一样受到威胁的任何想法?

4

1 回答 1

0

Mongoose 不支持任何类型的数组 ( [[Number]])。将来可能会支持它。

如果您的用例需要此模式,请使用允许临时结构但不提供更改跟踪或转换的混合类型。

new Schema({ geo: { type: Schema.Types.Mixed, index: '2d' }})

至于被视为大字符串的数组,猫鼬将无效参数转换为字符串,您观察到的是 javascript 如何将数组转换为字符串的工件。

var a = [3,4,5]
console.log(String(a)) // '3,4,5'
于 2013-03-20T13:19:54.197 回答