node.js - findbyid - mongoose tutorial español
Cómo definir objeto en matriz en el esquema Mongoose correctamente con 2d geo index (3)
Actualmente tengo problemas para crear un esquema para el documento a continuación. La respuesta del servidor siempre devuelve los valores del campo "trk" como [Objeto]. De alguna manera no tengo idea de cómo debería funcionar esto, ya que intenté al menos todos los enfoques que tenían sentido para mí ;-)
Si esto ayuda, mi versión de Mongoose es 3.6.20 y MongoDB 2.4.7 Y antes de que se me olvide, sería bueno también configurarlo como índice (2d)
Datos originales:
{
"_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
}]
}
}
Esquema de Mangosta:
var TrackSchema = Schema({
_id: Schema.ObjectId,
gpx: {
metadata: {
desc: String,
country: String,
isActive: Boolean
},
trk: [{lat:Number, lng:Number}]
}
}, { collection: "tracks" });
La respuesta de la pestaña Red en Chrome siempre se ve así (eso es solo la parte trk que está mal):
{ trk:
[ [Object],
[Object],
[Object],
[Object],
[Object],
[Object],
Ya probé diferentes definiciones de esquema para "trk":
- trk: Schema.Types.Mixed
- trk: [Schema.Types.Mixed]
- trk: [{type: [Number], index: "2d"}]
Espero que puedas ayudarme ;-)
Gracias por las respuestas
Intenté el primer acercamiento, pero nada cambió. Entonces, traté de registrar los resultados. Simplemente profundicé nivel por nivel, hasta que finalmente llegué a donde se mostraban los datos.
Después de un tiempo encontré el problema: cuando estaba enviando la respuesta, la estaba convirtiendo en una cadena a través de .toString()
.
Lo arreglé y ahora funciona brillantemente. Disculpa por la falsa alarma.
Puede declarar trk de las siguientes maneras:
trk : [{
lat : String,
lng : String
}]
o
trk : { type : Array , "default" : [] }
En el segundo caso durante la inserción, haga el objeto y empújelo en la matriz como
db.update({''Searching criteria goes here''},
{
$push : {
trk : {
"lat": 50.3293714,
"lng": 6.9389939
} //inserted data is the object to be inserted
}
});
o puede establecer la matriz de objetos por
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''
}
});
Tuve un problema similar con la mangosta:
fields:
[ ''[object Object]'',
''[object Object]'',
''[object Object]'',
''[object Object]'' ] }
De hecho, estaba usando "tipo" como nombre de propiedad en mi esquema:
fields: [
{
name: String,
type: {
type: String
},
registrationEnabled: Boolean,
checkinEnabled: Boolean
}
]
Para evitar ese comportamiento, debe cambiar el parámetro a:
fields: [
{
name: String,
type: {
type: { type: String }
},
registrationEnabled: Boolean,
checkinEnabled: Boolean
}
]