我的Express后端有一个GraphQL API . 一种类型的属性是计数 . 例如
type Baz {
id: ID
name: String!
bars: [Bar]
}
type Bar {
id: ID
name: String!
foo: Foo!
}
type Foo {
id: ID
name: String!
barCount: Int
}
这同样反映在数据库中(ORM是Sequelize,数据库是Postgresql) . 如果我现在正在触发此GraphQL查询:
{
Baz(id: 1){
...
bars {
...
foo {
...
barCount
}
}
}
}
会导致多个barCounts,这在Postgresql中非常昂贵(特别是当Bar有> 20.000.000行时)并最终在Bar上计数10次,如下所示:
Select count(*) AS count
FROM Bar
WHERE foo = 1;
我试图从一般查询中删除barCount并为计数添加一个额外的查询,然后将所有内容批量处理:
SELECT count(*) as count, foo
FROM Bar
WHERE foo IN (1,2,3)
GROUP BY foo;
但是如果我这样做,我就会遇到将barCount集成到React Apollo Client中的数据对象中的问题 .
或者我应该使用像Dataloader这样的东西来批处理所有不同的foo.barCounts?