如何在 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'])