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

  1. trk: schemat.Typy.Mieszane
  2. trk: [schemat.Typy.Mieszane]
  3. trk: [{type: [Number], index: "2d"}]

Mam nadzieję, że mi pomożesz; -)

Author: niels_h, 2013-10-31

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'
      }
});
 162
Author: Kundu,
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
    }
  ]
 54
Author: Pierre Maoui,
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.

 1
Author: niels_h,
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