2016-06-22 98 views
4

我嘗試進行這樣的查詢:Graphql查詢只不爲空的對象

{ 
people{ 
    pet{ 
    name 
    } 
} 
} 

結果:

{ 
"people": { 
    "pet": null 
} 
}, 
{ 
"people": { 
    "pet": { 
    name: "steve" 
    } 
} 
} 

我想要的是得到一個僅包含一個寵物的人,有什麼方法來實現這個不解碼我的解析器?

+0

http://stackoverflow.com/questions/36451910/graphql-query-only-include-field-if-not-null – SlartyBartfast

回答

0

這是不可能的你描述的方式。 GraphQL將調用解析函數來獲取數據。如果您不希望響應某些數據,則必須在服務器上的某個地方對其進行過濾。唯一可以控制的是查詢,模式和解析函數。

沒有辦法在查詢中純粹表達您的要求。如果你把它放在模式中,你將不再能夠查詢沒有寵物的人。所以唯一的方法就是將它寫入你的解析函數中。例如,您可以添加一個名爲hasPet你的人場boolean變量,而做到這一點的解析器:

people(root, { hasPet }){ 
    // get allPeople 
    if (typeof hasPet === 'undefined'){ 
    return allPeople 
    } 
    return allPeople.filter((person) => person.hasPet() === hasPet) 
} 

可惜的是,這將需要你「向前看」,並計算出,如果一個人有首先是一個寵物,但如果你使用DataLoader之類的東西來緩存後端數據庫或DB請求,這實際上並不昂貴,因爲無論如何您都必須獲取寵物。這樣你就可以提前一點拿到它。

如果您正在從數據庫中提取您的人員,那麼在那裏已經過濾了它們,而不是在解析函數中進行過濾。