如何查詢以下物件?
{
result: {
'1': {
^^^ these are dynamic keys, never constant
id: 'id1',
},
'20': {
id: 'id2',
},
'300': {
id: 'id3',
},
}
}
我知道我可以result相當簡單地定義物件,如果它不是鍵值對物件。
const ResultQueryType = new GraphQLObjectType({
name: 'ResultQueryType',
fields: () => ({
id: { type: GraphQLString }
})
})
但這顯然不是我需要的。GraphQL 還沒有遇到過這樣的場景,怎么辦呢?
uj5u.com熱心網友回復:
您可以按照此處的建議嘗試使用動態密鑰。https://graphql.org/graphql-js/type/#graphqlobjecttype
const ResultQueryType = new GraphQLObjectType({
name: "ResultQueryType",
fields: () => ({
[fieldName: string]: { type: GraphQLString },
}),
});
uj5u.com熱心網友回復:
您只能查詢已在架構中明確定義的欄位。
Spec:欄位選擇的目標欄位必須在選擇集的范圍型別上定義。
Docs每個 GraphQL 服務都定義了一組型別,它們完整地描述了您可以在該服務上查詢的一組可能的資料。然后,當查詢進來時,它們會根據該模式進行驗證和執行。
換句話說,Results如果架構定義不知道其欄位,則您不能擁有映射型別(因此無法查詢它)。有幾種解決方法:
- 使用 JSON。許多實作允許您將自定義標量定義為 JSON或具有別名
JSON型別String。您保留了地圖結構,但失去了型別意識。由客戶端來決議結果。 - 將您的地圖重構為陣列。如果可以將頂級鍵合并到每條記錄中,則可以回傳一個
[Item]陣列。你必須放棄地圖,但你保持完整的 GraphQL 型別意識。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/374126.html
上一篇:如何在函式登錄nodejs中添加async/await?
下一篇:回傳函式回傳值最高的串列元素
