2011-12-03 18 views
1

試圖獲得一些電影及其流派,但省略了流派陣列中包含流派「驚悚」的任何記錄。Freebase MQL - 如果數組元素中的值存在,不要顯示父對象?

我該如何忽略「Thriller」的流派密鑰本身,但會壓制整部電影的結果?用我當前的查詢,Thriller從流派陣列中刪除,但父對象(電影)仍然顯示。

這裏的查詢編輯器我目前的後處理: http://tinyurl.com/d2g54lj

[{ 
    'type':'/film/film', 
    'limit':5, 
    'name':null, 
    '/film/film/genre': [], 
    '/film/film/genre!=': "Thriller", 
}]​ 

回答

1

提供的答案是正確的,但在查詢中也改變了一些其他的東西。這裏的直接等同於原始查詢:

[{ 
    "type":   "/film/film", 
    "limit":   5, 
    "name":   null, 
    "genre": [], 
    "x:genre": {"name":"Thriller", 
       "optional":"forbidden"}, 
}]​ 

的重要組成部分,是「可選」:「禁止」。使用的默認屬性是「name」,但我們需要在使用子條款時明確指定它(以允許我們指定「可選」關鍵字)。正如@kook所做的那樣,使用ID而不是名稱實際上更可靠,所以這是一種改進,但我希望人們能夠看到修復損壞的查詢所需的最低限度。我們可以從「/ film/film/genre」中將屬性名縮寫爲「genre」,因爲包含了「type」:「/ film/film」(我們也不需要使用/ type//類型/對象/名稱)。

0

回答我的問題。

因此,關鍵是要使用!=(但不是)運營商,但實際上它翻轉在它的頭,並使用「| =」(一)經營者與「禁止」,像這樣:

[{ 
    'type':'/film/film', 
    'limit':5, 
    'name':null, 
    '/film/film/genre': [{ 
    "id":  null, 
    "optional": true 
    }], 
    "forbid:/film/film/genre": { 
    "id|=": [ 
     "/en/thriller", 
     "/en/slapstick" 
    ], 
    "optional": "forbidden" 
    } 
}]​ 

感謝以下職位:

Freebase query - exclusion of certain values

+0

爲了確保沒有人被誤導,重要的部分是「可選」:「禁止」,而不是「禁止:」。這只是一個隨機標籤,因爲JSON不允許重複字典密鑰。它可以是「foo:」或「f:」或「x:」或冒號前的其他任何內容。 –

相關問題