Jak poprawnie zdefiniować obiekt w tablicy w schemacie Mongoose za pomocą 2d geo index
Obecnie mam problemy z tworzeniem schematu dla poniższego dokumentu. Odpowiedź z serwera zawsze zwraca wartości pola " trk " jako [Object]. Jakoś nie mam pojęcia, jak to powinno działać, ponieważ próbowałem przynajmniej wszystkich podejść, które miały dla mnie sens; -)
Jeśli to pomoże, moja wersja mangusty to 3.6.20 i MongoDB 2.4.7 I zanim zapomnę, byłoby miło również ustawić go jako Index (2D)Oryginalne dane:
{
"_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
}]
}
}
Schemat Mangusty:
var TrackSchema = Schema({
_id: Schema.ObjectId,
gpx: {
metadata: {
desc: String,
country: String,
isActive: Boolean
},
trk: [{lat:Number, lng:Number}]
}
}, { collection: "tracks" });
The odpowiedź z zakładki sieć w Chrome zawsze wygląda tak (to tylko część trk, która jest błędna):
{ trk:
[ [Object],
[Object],
[Object],
[Object],
[Object],
[Object],
Próbowałem już różnych definicji schematu dla "trk":
- trk: schemat.Typy.Mieszane
- trk: [schemat.Typy.Mieszane]
- trk: [{type: [Number], index: "2d"}]
Mam nadzieję, że mi pomożesz; -)
3 answers
Możesz zadeklarować trk następującymi sposobami : - albo
trk : [{
lat : String,
lng : String
}]
Lub
trk : { type : Array , "default" : [] }
W drugim przypadku podczas wstawiania wykonaj obiekt i wciśnij go do tablicy jak
db.update({'Searching criteria goes here'},
{
$push : {
trk : {
"lat": 50.3293714,
"lng": 6.9389939
} //inserted data is the object to be inserted
}
});
Lub możesz ustawić tablicę obiektu przez
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'
}
});
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-31 08:50:33
Miałem podobny problem z mangustą:
fields:
[ '[object Object]',
'[object Object]',
'[object Object]',
'[object Object]' ] }
W rzeczywistości używałem" type " jako nazwy właściwości w moim schemacie:
fields: [
{
name: String,
type: {
type: String
},
registrationEnabled: Boolean,
checkinEnabled: Boolean
}
]
Aby uniknąć takiego zachowania, musisz zmienić parametr na:
fields: [
{
name: String,
type: {
type: { type: String }
},
registrationEnabled: Boolean,
checkinEnabled: Boolean
}
]
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-12-16 17:18:22
Dzięki za odpowiedzi.
Próbowałem pierwszego podejścia, ale nic się nie zmieniło. Potem próbowałem zapisać wyniki. Po prostu wierciłem poziom po poziomie, aż w końcu dotarłem do miejsca, w którym dane były wyświetlane.Po chwili znalazłem problem: kiedy wysyłałem odpowiedź, konwertowałem ją na łańcuch znaków przez .toString()
.
Naprawiłem to i teraz działa genialnie. Przepraszam za fałszywy alarm.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-22 01:43:04