Как построить объект JSON в запросе выбора в Objection.js

У меня есть столбец "местоположение" типа jsonb в таблице "Объявления". Он хранит значения, подобные этим:

{"lat": 33.742001, 
"lng": -117.823639, 
"zip": "92780", 
"city": "Tustin", 
"state": "CA"}

Как бы я написать запрос выбора в Objection.js, который возвращает тот же location объект только с "городской" собственностью в нем. Мне нужно что-то вроде:

const ads = AdModel.query().select([
  ...
  ? // <- need the result to be {location: {city: "Tustin"}}
])

В принципе, мне нужно построить {location: city: ...} Объект и введите название города.

1 ответ

Добавьте $parseDatabaseJson для разбора поля местоположения

class Ads extends Model {
  static get tableName() {
    return 'Ads';
  }
  $parseDatabaseJson(json) {
    json = super.$parseDatabaseJson(json);
    let location = json.location;
    if(location){
       location =  JSON.parse(location)
    }
    return Object.assign({}, json,{ location });
  }
}

добавить карту для выбора конкретного поля

Ads.query()
.select('location')
.map((data)=>data.location.city)
.then((city)=>console.log(city));

Я на самом деле был в состоянии построить объект JSON, который мне нужен как таковой внутри .select([...]) метод:

raw("json_build_object('city', ??.location->'city') as location", ['Ads'])
Другие вопросы по тегам