現在、以下のドキュメントのスキーマを作成するのに困っています。サーバーからのレスポンスは、常に"trk"フィールドの値を[Object]として返します。少なくとも私にとって意味のあるアプローチはすべて試したのですが、なぜかこれがどのように機能すべきなのかわかりません ;-)
参考までに、私のMongooseのバージョンは3.6.20、MongoDBは2.4.7です。 それから、忘れないうちに言っておきますが、インデックス(2d)としても設定できるといいですね。
オリジナルのデータです。
{
"_id": ObjectId("51ec4ac3eb7f7c701b000000"),
"gpx": {
"metadata": {
"desc": "Nürburgring VLN-Variante",
"country": "de",
"isActive": true
},
"trk": [
{
"lat": 50.3299594,
"lng": 6.9393006
},
{
"lat": 50.3295046,
"lng": 6.9390688
},
{
"lat": 50.3293714,
"lng": 6.9389939
},
{
"lat": 50.3293284,
"lng": 6.9389634
}]
}
}
マングースのスキーマです。
var TrackSchema = Schema({
_id: Schema.ObjectId,
gpx: {
metadata: {
desc: String,
country: String,
isActive: Boolean
},
trk: [{lat:Number, lng:Number}]
}
}, { collection: "tracks" });
ChromeのNetworkタブからのレスポンスは常に以下のようになります(trkの部分だけが間違っています)。
{ trk:
[ [Object],
[Object],
[Object],
[Object],
[Object],
[Object],
すでに、"trk"のための異なるスキーマ定義を試しました。
ご参考になれば幸いです。)
以下の方法でtrkを宣言することができます。 いずれか
trk : [{
lat : String,
lng : String
}]
または
trk : { type :Array , "default" : [] }
.
2番目のケースでは、挿入時にオブジェクトを作成し、次のようにそれを配列に押し込みます。
db.update({'Searching criteria goes here'},
{
$push : {
trk : {
"lat": 50.3293714,
"lng": 6.9389939
} //inserted data is the object to be inserted
}
});
または、以下の方法でオブジェクトの配列を設定します。
db.update ({'seraching criteria goes here ' },
{
$set : {
trk : [ {
"lat": 50.3293714,
"lng": 6.9389939
},
{
"lat": 50.3293284,
"lng": 6.9389634
}
]//'inserted Array containing the list of object'
}
});
mongooseでも同じようなことがありました。
fields:
[ '[object Object]',
'[object Object]',
'[object Object]',
'[object Object]' ] }
実際、私のスキーマでは、プロパティ名として "type" を使用していました。
fields: [
{
name: String,
type: {
type: String
},
registrationEnabled: Boolean,
checkinEnabled: Boolean
}
]
このような動作を避けるためには、パラメータを.NETに変更する必要があります。
fields: [
{
name: String,
type: {
type: { type: String }
},
registrationEnabled: Boolean,
checkinEnabled: Boolean
}
]