Wie definiert man ein Objekt in einem Array im Mongoose Schema korrekt mit einem 2d geo index
Ich habe derzeit Probleme bei der Erstellung eines Schemas für das unten stehende Dokument. Die Antwort vom Server gibt die "trk" Feldwerte immer als [Object] zurück. Irgendwie habe ich keine Ahnung, wie das funktionieren soll, da ich zumindest alle Ansätze ausprobiert habe, die für mich Sinn machten ;-)
Falls das hilft, meine Mongoose-Version ist 3.6.20 und MongoDB 2.4.7 Und bevor ich es vergesse, es wäre schön, wenn man es auch als Index (2d) einstellen könnte
Ursprüngliche Daten:
{
"_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" });
Die Antwort der Registerkarte Netzwerk in Chrome sieht immer so aus (nur der trk-Teil ist falsch):
{ trk:
[ [Object],
[Object],
[Object],
[Object],
[Object],
[Object],
Ich habe bereits verschiedene Schemadefinitionen für "trk" ausprobiert:
- trk: Schema.Types.Mixed
- trk: [Schema.Types.Mixed]
- trk:[ { type:[Number], index: "2d" }]
Hoffe ihr könnt mir helfen ;-)
106
3
Sie können trk auf die folgenden Arten deklarieren: - entweder
oder
trk : { type : Array , "default" : [] }
Im zweiten Fall wird beim Einfügen das Objekt erstellt und in das Array geschoben, wie
oder Sie können das Array des Objekts durch
Ich hatte ein ähnliches Problem mit mongoose:
In der Tat habe ich "type" als Eigenschaftsname in meinem Schema verwendet:
Um dieses Verhalten zu vermeiden, müssen Sie den Parameter in:
Vielen Dank für die Antworten.
Ich habe den ersten Ansatz versucht, aber es hat sich nichts geändert. Dann habe ich versucht, die Ergebnisse zu protokollieren. Ich habe einfach Ebene für Ebene nach unten gebohrt, bis ich schließlich zu dem Punkt kam, an dem die Daten angezeigt wurden.
Nach einer Weile fand ich das Problem: Als ich die Antwort sendete, konvertierte ich sie in eine Zeichenkette mittels
.toString()
.Ich habe das behoben und jetzt funktioniert es hervorragend. Entschuldigung für den Fehlalarm.