【发布时间】:2020-06-19 20:08:42
【问题描述】:
我在项目中使用 objextion.js 和 knex。
我想从关系中选择两个属性并将它们嵌套在一个数组中。该关系包含具有属性 lat 和 lng 的对象数组,我需要接收具有 lat 和 lng [[lat, lng]] 的数组数组。我如何理解我必须从反对中选择字段并使用 raw 来编写 array_agg 以包含我的道具,但我不明白必须有什么语法。
在 modifyGraph 中选择我收到带有 lng 和 lat 的对象数组
我的请求
const query = Restaurants
.query()
.withGraphFetched({
schedule: true,
})
.skipUndefined();
if (lat && lng) {
query.withGraphFetched({
areas: {
area: {
coordinates: true,
},
},
}).modifyGraph('areas.area.coordinates', (builder) => {
builder.select([
'lat',
'lng',
]);
});
}
return query
.andWhere(restFields)
.andWhere('name', 'ilike', `%${search}%`);
};
我的 db 回复
[
AreasCoordinatesModel { lat: -46.653, lng: -23.543 },
AreasCoordinatesModel { lat: -46.634, lng: -23.5346 },
]
而且必须是
[
[ -46.653, -23.543 ],
[ -46.634,-23.5346 ]
]
【问题讨论】:
-
你不能写一个自定义的 JS 函数来接受 db 响应并将其转换为你需要的吗?
-
@tHeSiD 不幸的是,收到这个列表后,已经过去了 2 个嵌套循环,我不想增加循环次数,我确信我可以从数据库中获取我的属性作为数组.
-
在
afterFind钩子中实现它? vincit.github.io/objection.js/api/model/… 或者只是像@tHeSiD 所说的那样创建一个特定的方法
标签: sql node.js postgresql knex.js objection.js