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
}

最初の初心者の質問は:私がしていることをすることは可能ですか?geoで配列の配列を送信しますか?

そして、これが私がデータを保存する方法です:

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);
   });  
});

geoで配列を送信して空にすると、すべて正常に機能します。ただし、次のエラーが発生します

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

「geo」で配列(上記のような)を送信するときはいつでも。

では、2番目の質問ですが、アレイが大きな文字列のように脅かされている理由について何か考えはありますか?

4

1 に答える 1

0

Mongooseは、どのタイプの配列の配列もサポートしていません([[Number]])。将来的にサポートされる可能性があります。

ユースケースでこのスキーマが必要な場合は、アドホック構造を許可するが変更の追跡やキャストを提供しない混合型を使用してください。

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

大きな文字列として扱われる配列に関しては、mongooseは無効な引数を文字列に変換します。観察されるのは、javascriptが配列を文字列に変換する方法のアーティファクトです。

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