reactjs - 过滤 GraphQL 查询的正确方法是什么?
问题描述
例如,假设我按如下方式调用 graphQL:
query {
product {
title
description
price
path
}
}
这个调用返回给我一个包含 10 个项目的数组,但我随机只想要 5 个。我目前将其设置为获取 10 个然后随机抓取 5 个,但我觉得 GraphQL 仍然工作太努力,如果我说返回 1000 个项目,我不需要其中的 995 个。
我见过这样的查询:
query {
product(limit:5) {
title
description
price
path
}
}
这将使它无论如何只返回 5 件物品。我的问题是,这是在解析器中处理的吗?
我的解析器当前的外观是:
product: async () => {
try {
const products = await Product.find()
return products.map(product => {
return transformProduct(product);
})
} catch (err) {
throw err;
}
}
这样做是否正确:
product: async ({limit}) => {
try {
let products = await Product.find()
if(limit) {
products = getRandom(products, limit)
}
return products.map(product => {
return transformProduct(product);
})
} catch (err) {
throw err;
}
}
我现在已经测试过它是否有效,但我担心 GraphQL 仍然检索到比它需要的更多的数据。这是阿波罗处理其“第一”和“跳过”变量的方式还是更有效?
解决方案
您基本上需要将“限制”传递给您的 Product.find() 以便它只处理从数据库中检索 5;也许在 SQL 中使用“LIMIT 5”子句,假设您也将 SELECT 更改为随机化。如果你在丢弃大部分之前检索它们,那么你实现的 GraphQL 过滤器很糟糕
推荐阅读
- node.js - 通过基于 nodejs 的微服务处理大量并行请求以修改 nosql 数据库中的许可证计数
- c++ - 编辑基于 Llvm 的项目时,Clang 代码模型在 qtcreator 中停止工作
- javascript - 如何在反应原生图像滑块框中更改图像大小
- flutter - 绘制函数 CustomPaint 和 PictureRecorder 以不同的尺寸工作
- javascript - Odoo14 JS 标签未翻译
- html - 我正在尝试使用 aframe 在 asp.net 核心上运行 360 度视频,但视频未加载
- docker - docker 无法连接到 docker 守护进程,但已创建套接字
- c++ - 在互斥体上使用多个std :: unique_lock,FIFO中的所有线程都等待进程?
- sql - 限制插入具有默认值的列
- python - 命令出错,退出状态为 1:python setup.py egg_info 检查日志以获取完整的命令输出。任何人都可以提供帮助