Как добавить вычисляемое поле для геопространственных запросов (например, тип объекта)? - PullRequest
0 голосов
/ 15 января 2020

У меня есть модель store.

const StoreSchema = new Schema(
 {
   Name: String,
   Lng: String,
   Lat: String,
 },
 {
   timestamps: true,
 }
};

Я хочу добавить новое вычисляемое поле из полей Lng и Lat, как показано ниже;

// Location field from Lng(-48.4),Lat(34)
// This will be used for Geospatial Queries

{
  type: 'Point', //constant String value
  coordinates: [ -48.4, 34 ] // array of float numbers
}

Я мог бы легко добавить вычисляемое поле типа GraphQLString. Но не удалось для Object типа. Я попробовал, как показано ниже:

StoreSchema.virtual('Location')
 .get(() => {
   return {
     type: 'Point',
     coordinates: [parseFloat(this.Lng), parseFloat(this.Lat)]
   };
  });
...

const LocationType = new GraphQLObjectType({
 name: "Location",
 fields: {
   type: {type: GraphQLString},
   coordinates: {type: graphQLList(GraphQLFloat)}
 }
});

const StoreType = new GraphQLObjectType({
 name: "Store",
 fields: {
   ...
   Location: {type: LocationType}
 }
});

Мой запрос

store {
  Location {
    type,
    coordinates
  }
}

Результат

"data": {
  "store": [
   {
     "Location": {
       "type": "Point",
       "coordinates": [
          null, // this is wrong. :(
          null  // this is wrong. :(
       ]
     }
   }
   ...
  ]
}

Итак ... Как я могу получить правильное вычисленное поле?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...