Как построить объект 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'])