【问题标题】:How to populate calculated fields in nestjs resolver?如何在 nestjs 解析器中填充计算字段?
【发布时间】:2022-02-02 03:15:51
【问题描述】:

我最近从 type-graphql 切换到了 nestjs,以利用 nestjs 的功能。

我曾经能够根据查询参数和数据库结果在解析器中设置字段,例如距离和平均评分等。

@Resolver(Provider)
export class ProviderResolver {
  @Query((returns) => [Provider])
  async providers(@Args() { location, distance }: ProviderFilterArgs): Promise<Provider[]> {
    let providers: Provider[] = await ProviderModel.find();

    providers.map((provider) => {
      provider.distanceToProvider = getDistance(
        location ? location : [fooNumber, barNumber], // default coords
        provider.locations[0].geocode
      );

      return provider;
    });

    return providers;
  }
}

这种方法似乎不适用于nestjs,因为架构与实体类型冲突(实体具有“distanceToProvider”字段,而猫鼬架构则没有)。我做错了吗,还是返回映射的数据库结果是一种不好的做法?

也许可以在@ResolveField 中计算和添加字段,但据我了解,这些字段更多地用于使用另一个数据库调用填充引用的 Id。是否可以在 mongodb 聚合函数中做到这一点?

在返回响应之前我应该​​如何添加字段?

【问题讨论】:

    标签: mongodb graphql nestjs


    【解决方案1】:

    我觉得你在正确的轨道上,我也认为你的方法应该在理论上有效。考虑到它不起作用的事实使我得出结论,您的 shema 定义存在问题。你能把这个贴出来吗(这个服务和数据库的一个)?它们是通过网关联合的吗? DB-shema 是否实现了 Apollo-federation 规范(即是否有 @key-directive?)?

    如果是这样,那么您的服务很可能会扩展该类型。 在这种情况下,@ResolveField 将是可行的方法,并且肯定会被认为是一种好的做法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多