現在、以下のドキュメントのスキーマを作成する際に問題が発生しています。サーバーからの応答では、常に「trk」フィールドの値が [Object] として返されます。少なくとも、私にとって意味のあるすべてのアプローチを試したのですが、これがどのように機能するのかまったくわかりません ;-)
これが役に立つなら、私のMongooseバージョンは3.6.20、MongoDBは2.4.7です。忘れる前に、Index(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 の [ネットワーク] タブからの応答は常に次のようになります (間違っているのは trk 部分のみです)。
{ trk:
[ [Object],
[Object],
[Object],
[Object],
[Object],
[Object],
私はすでに「trk」に対してさまざまなスキーマ定義を試しました:
- trk: スキーマ.タイプ.混合
- trk: [スキーマ.タイプ.混合]
- trk:[ { タイプ:[数値], インデックス: "2d" }]
助けていただければ幸いです ;-)
ベストアンサー1
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'
}
});