Как определить объект в массив правильно в схему Мангуст с индексом 2Д гео


В настоящее время у меня возникли проблемы при создании схемы для документа ниже. Ответ от сервера всегда возвращает значения поля " trk " в виде [Object]. Как-то я понятия не имею, как это должно работать, так как я пробовал по крайней мере все подходы, которые имели смысл для меня ;-)

Если это поможет, моя версия Мангуст 3.6.20 и MongoDB 2.4.7 И прежде чем я забуду, было бы неплохо также установить его как Index (2d)

исходные данные:

{
    "_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
    }]
    }
}

Мангуст Схема:

var TrackSchema = Schema({
            _id: Schema.ObjectId,
            gpx: {
                metadata: {
                    desc: String,
                    country: String,
                    isActive: Boolean
                },
                trk: [{lat:Number, lng:Number}]
            }
        }, { collection: "tracks" });

ответ с вкладки "сеть" в Chrome всегда выглядит так (это только trk-часть, которая неверна):

{ trk: 
      [ [Object],
        [Object],
        [Object],
        [Object],
        [Object],
        [Object],

Я уже пробовал разные определения схемы для "trk":

  1. trk: схема.Типы.Смешанный
  2. trk: [схема.Типы.Смешанный]
  3. trk: [ { type:[Number], index:" 2d"}]

надеюсь, вы можете мне помочь ; -)

3 85

3 ответа:

вы можете объявить trk следующими способами : - либо

trk : [{
    lat : String,
    lng : String
     }]

или

trk : { type : Array , "default" : [] }

во втором случае во время введения объект и вставьте его в массив, как

db.update({'Searching criteria goes here'},
{
 $push : {
    trk :  {
             "lat": 50.3293714,
             "lng": 6.9389939
           } //inserted data is the object to be inserted 
  }
});

или вы можете установить массив объекта по

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'
      }
});

у меня была аналогичная проблема с Мангустом :

fields: 
    [ '[object Object]',
     '[object Object]',
     '[object Object]',
     '[object Object]' ] }

на самом деле, я использовал "тип" в качестве имени свойства в моей схеме :

fields: [
    {
      name: String,
      type: {
        type: String
      },
      registrationEnabled: Boolean,
      checkinEnabled: Boolean
    }
  ]

чтобы избежать такого поведения, вы должны изменить параметр на :

fields: [
    {
      name: String,
      type: {
        type: { type: String }
      },
      registrationEnabled: Boolean,
      checkinEnabled: Boolean
    }
  ]

Спасибо за ответы.

я попробовал первый подход, но ничего не изменилось. Затем я попытался записать результаты. Я просто сверлил уровень за уровнем, пока, наконец, не добрался до того места, где отображались данные.

через некоторое время я обнаружил проблему: когда я отправлял ответ, я преобразовывал его в строку через .toString().

я исправил это, и теперь он работает блестяще. Извините за ложную тревогу.