Şu anda aşağıdaki belge için bir şema oluşturmada sorun yaşıyorum. Sunucudan gelen yanıt her zaman "trk" alan değerlerini [Object] olarak döndürüyor. Her nasılsa bunun nasıl çalışması gerektiği hakkında hiçbir fikrim yok, çünkü en azından bana mantıklı gelen tüm yaklaşımları denedim ;-)
Eğer yardımcı olacaksa, Mongoose sürümüm 3.6.20 ve MongoDB 2.4.7 Ve unutmadan, bunu Dizin (2d) olarak da ayarlamak güzel olurdu
Orijinal veriler:
{
"_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
}]
}
}
Mongoose Şeması:
var TrackSchema = Schema({
_id: Schema.ObjectId,
gpx: {
metadata: {
desc: String,
country: String,
isActive: Boolean
},
trk: [{lat:Number, lng:Number}]
}
}, { collection: "tracks" });
Chrome'daki Ağ sekmesinden gelen yanıt her zaman bu şekilde görünür (bu sadece yanlış olan trk kısmıdır):
{ trk:
[ [Object],
[Object],
[Object],
[Object],
[Object],
[Object],
trk" için farklı Schema tanımlarını zaten denedim:
Umarım bana yardımcı olabilirsiniz ;-)
Trk'yi aşağıdaki yollarla beyan edebilirsiniz : - ya
trk : [{
lat : String,
lng : String
}]
veya
trk : { tip : Dizi , "varsayılan" : [] }
İkinci durumda, ekleme sırasında nesneyi oluşturun ve aşağıdaki gibi diziye itin
db.update({'Searching criteria goes here'},
{
$push : {
trk : {
"lat": 50.3293714,
"lng": 6.9389939
} //inserted data is the object to be inserted
}
});
veya Array of object'i şu şekilde ayarlayabilirsiniz
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'
}
});
Ben de mongoose ile benzer bir sorun yaşadım:
fields:
[ '[object Object]',
'[object Object]',
'[object Object]',
'[object Object]' ] }
Aslında, şemamda bir özellik adı olarak "type" kullanıyordum:
fields: [
{
name: String,
type: {
type: String
},
registrationEnabled: Boolean,
checkinEnabled: Boolean
}
]
Bu davranıştan kaçınmak için parametreyi:
fields: [
{
name: String,
type: {
type: { type: String }
},
registrationEnabled: Boolean,
checkinEnabled: Boolean
}
]
Cevaplar için teşekkürler.
İlk yaklaşımı denedim ama hiçbir şey değişmedi. Sonra sonuçları günlüğe kaydetmeye çalıştım. Sonunda verilerin görüntülendiği yere ulaşana kadar seviye seviye aşağı indim.
Bir süre sonra sorunu buldum: Yanıtı gönderirken, .toString()
aracılığıyla bir dizeye dönüştürüyordum.
Bunu düzelttim ve şimdi harika çalışıyor. Yanlış alarm için özür dilerim.