2014-07-17 127 views
0

我遇到了一個簡單的密碼查詢的麻煩。查詢是:哪裏不是()在cypher neo4j查詢

MATCH (u:user { google_id : 'example_user' })--(rm:room)--(a:area), 
    (c:category { name : 'culture:Yoruba' })--(o:object) 
WHERE NOT (a-[:CONTAINS]->o) 
RETURN DISTINCT o.id 

「WHERE NOT ..」被忽略,我從區域節點獲取帶有傳入:CONTAINS關係的節點。如果我拿出「NOT」函數,那麼我正確地只返回具有這個a - > o關係的節點。

我想我還沒有()

+0

它似乎在這裏工作:http://console.neo4j.org/r/4nukek你能重現該問題存在並共享一個新的鏈接? – jjaderberg

+1

也要小心這樣的斷開模式,你會得到任何在兩個模式部分單獨匹配的叉積。在一個小圖上它可能並不重要,但是在更大的圖上它將是昂貴的。我可能會更好地使用WITH WITH MATCH(c:category ...)來打破查詢,而不是將返回過濾到不同的值。 – jjaderberg

+0

在這裏尋找轉載問題:[link](http://console.neo4j.org/r/nn691p)最後一個查詢不應該返回對象3704,我嘗試使用WITH A語法,感謝。 – trad

回答

5

島的弱理解,

該查詢返回的正是你問它。在你的例子中,有三個區域。前兩個區域都不包含任何對象,因此所有三個節點都會返回。如果將RETURN行更改爲

RETURN a.area_number, o.id 

您會看到此內容。

我不知道你的問題比較大背景下,但如果你想知道這個問題是不是在任何面對象,然後將查詢

MATCH (o:object) 
WHERE NOT (o)<-[:CONTAINS]-() 
RETURN o.id 

能完成這個任務。

恩惠,平安,

吉姆