如何通过Shopify批量操作获取指定集合关联的商品?
解决Shopify Bulk Query获取特定集合商品的问题
问题背景
现有一段GraphQL批量查询代码,可导出全店商品的JSONL文件:
query = ''' mutation { bulkOperationRunQuery( query : """ { products { edges { node { id title vendor } } } } """ ){ bulkOperation { id status } userErrors { field message } } }''' shopify.GraphQL().execute(query)
需要修改为仅导出指定集合关联的商品,但尝试的查询报错:
错误尝试代码
mutation { bulkOperationRunQuery( query: """ { collection(id: "gid://shopify/Collection/265856909370") { edges { cursor node { id handle } } pageInfo { hasNextPage } } } """ ) { bulkOperation { id status } userErrors { field message } } }
错误信息
{"bulkOperationRunQuery":{"bulkOperation":null,"userErrors":[{"field":["query"],"message":"Invalid bulk query: Field 'edges' doesn't exist on type 'Collection'"},{"field":["query"],"message":"Invalid bulk query: Field 'pageInfo' doesn't exist on type 'Collection'}]}}
问题原因
edges和pageInfo是列表类型字段(比如products、collections)的专属字段,用于分页查询多条数据;而单条collection是对象类型,直接访问其属性即可,不需要这两个字段。- 原查询没有关联集合下的
products字段,根本没获取商品数据。
正确解决方案
要获取指定集合的商品,需在collection节点下嵌套products字段,同时去掉多余的edges/pageInfo(针对单集合查询):
方案1:查询单个指定集合的商品
mutation { bulkOperationRunQuery( query: """ { collection(id: "gid://shopify/Collection/265856909370") { products { edges { node { id title vendor # 可添加更多商品字段 } } } } } """ ) { bulkOperation { id status } userErrors { field message } } }
方案2:通过集合列表过滤查询(适用于多集合场景)
如果需要同时查询多个集合,可使用collections列表+filter参数:
mutation { bulkOperationRunQuery( query: """ { collections(filter: {id: "gid://shopify/Collection/265856909370"}) { edges { node { products { edges { node { id title vendor } } } } } } } """ ) { bulkOperation { id status } userErrors { field message } } }
注意事项
Shopify Bulk Operation会自动处理商品的分页逻辑,无需手动管理cursor和pageInfo,提交查询后等待操作完成即可下载对应的JSONL文件。
内容的提问来源于stack exchange,提问作者redochka
相关产品推荐
相关产品推荐

