update tutorial findbyid español node.js mongodb mongoose schema geo

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":

  1. trk: Schema.Types.Mixed
  2. trk: [Schema.Types.Mixed]
  3. 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 } ]