如何在 Objection.js 中的 select 查询中构建 JSON 对象
How to build a JSON object in select query in Objection.js
我在 table "Ads" 中有一个 "location" jsonb 类型的列。它存储如下值:
{"lat": 33.742001,
"lng": -117.823639,
"zip": "92780",
"city": "Tustin",
"state": "CA"}
我如何在 Objection.js 中编写一个 select 查询,使 returns 相同的 location
对象只有 "city" 属性它。我需要这样的东西:
const ads = AdModel.query().select([
...
? // <- need the result to be {location: {city: "Tustin"}}
])
基本上,我需要构建{location: city: ...}
对象并填写城市名称。
添加 $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));
我实际上能够在 .select([...])
方法中构建我需要的 JSON 对象:
raw("json_build_object('city', ??.location->'city') as location", ['Ads'])
我在 table "Ads" 中有一个 "location" jsonb 类型的列。它存储如下值:
{"lat": 33.742001,
"lng": -117.823639,
"zip": "92780",
"city": "Tustin",
"state": "CA"}
我如何在 Objection.js 中编写一个 select 查询,使 returns 相同的 location
对象只有 "city" 属性它。我需要这样的东西:
const ads = AdModel.query().select([
...
? // <- need the result to be {location: {city: "Tustin"}}
])
基本上,我需要构建{location: city: ...}
对象并填写城市名称。
添加 $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));
我实际上能够在 .select([...])
方法中构建我需要的 JSON 对象:
raw("json_build_object('city', ??.location->'city') as location", ['Ads'])