【问题标题】:How to select two properties from array of objects as array on knex?如何从对象数组中选择两个属性作为 knex 上的数组?
【发布时间】:2020-06-19 20:08:42
【问题描述】:

我在项目中使用 objextion.jsknex

我想从关系中选择两个属性并将它们嵌套在一个数组中。该关系包含具有属性 latlng 的对象数组,我需要接收具有 lat 和 lng [[lat, lng]] 的数组数组。我如何理解我必须从反对中选择字段并使用 raw 来编写 array_agg 以包含我的道具,但我不明白必须有什么语法。

modifyGraph 中选择我收到带有 lnglat 的对象数组

我的请求

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


【解决方案1】:

您可以在返回时映射数组中的所有对象

return (query
    .andWhere(restFields)
    .andWhere('name', 'ilike', `%${search}%`)).map(Object.values);

它会如你所愿返回。

【讨论】:

    猜你喜欢
    • 2015-11-05
    • 2012-02-24
    • 1970-01-01
    • 2021-09-16
    • 1970-01-01
    • 1970-01-01
    • 2015-08-22
    • 2023-01-27
    • 2020-11-08
    相关资源
    最近更新 更多