Jeg' har for øyeblikket problemer med å lage et skjema for dokumentet nedenfor. Svaret fra serveren returnerer alltid "trk" feltverdiene som [Object]. På en eller annen måte har jeg ingen anelse om hvordan dette skal fungere, da jeg prøvde i det minste alle tilnærminger som ga mening for meg ;-)
Hvis dette hjelper, er Mongoose-versjonen min 3.6.20 og MongoDB 2.4.7. Og før jeg glemmer det, ville det være fint å også angi det som Index (2d)
Originale data:
{
"_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 Schema:
var TrackSchema = Schema({
_id: Schema.ObjectId,
gpx: {
metadata: {
desc: String,
country: String,
isActive: Boolean
},
trk: [{lat:Number, lng:Number}]
}
}, { collection: "tracks" });
Svaret fra Nettverk-fanen i Chrome ser alltid slik ut (det er bare trk-delen som er feil):
{ trk:
[ [Object],
[Object],
[Object],
[Object],
[Object],
[Object],
Jeg har allerede prøvd forskjellige Schema-definisjoner for "trk":
Håper du kan hjelpe meg ;-)
Du kan deklarere trk på følgende måter enten
trk : [{
lat : String,
lng : String
}]
eller
trk : { type : Array , "default" : [] }
.
I det andre tilfellet lager du objektet under innsetting og skyver det inn i matrisen på følgende måte
db.update({'Searching criteria goes here'},
{
$push : {
trk : {
"lat": 50.3293714,
"lng": 6.9389939
} //inserted data is the object to be inserted
}
});
eller du kan angi objektets matrise ved hjelp av
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'
}
});
Jeg hadde et lignende problem med mongoose:
fields:
[ '[object Object]',
'[object Object]',
'[object Object]',
'[object Object]' ] }
Faktisk brukte jeg "type" som egenskapsnavn i skjemaet mitt:
fields: [
{
name: String,
type: {
type: String
},
registrationEnabled: Boolean,
checkinEnabled: Boolean
}
]
For å unngå dette må du endre parameteren til:
fields: [
{
name: String,
type: {
type: { type: String }
},
registrationEnabled: Boolean,
checkinEnabled: Boolean
}
]
Takk for svarene.
Jeg prøvde den første fremgangsmåten, men ingenting endret seg. Deretter prøvde jeg å logge resultatene. Jeg boret meg nedover nivå for nivå, helt til jeg endelig kom til der dataene ble vist.
Etter en stund fant jeg problemet: Når jeg sendte svaret, konverterte jeg det til en streng via .toString()
.
Jeg fikset det, og nå fungerer det strålende. Beklager den falske alarmen.