2012-07-05 81 views
0

如果我們按同樣類型的關係的Cypher查詢,使其中的幾個節點的屬性,如果它們具有相同類型的關係

classmetadata<-INSTANCE_OF-instance(TheNodeINeed)-RELATED_TO->................... 

- ->listype(The owner(name=d,etc)) 
- ->listype(The state(name=x,etc)) 
- ->listype(The propertie(name=y,etc)) 
- ->listype(The location(name=z,etc)) 

實例節點找到與其他節點相關的節點必須,通過名稱(這很容易)通過索引內的節點類元數據和實例名稱(這也很容易)以及列表類型.name = ..和列表類型 .name = ..和listype .name = ..這裏是問題:

如果我嘗試尋找只爲例如與名稱MYINSTANCE誰是RELATED_TO一個所有者與名d,在這裏我只quering約listype節點沒有任何問題,這個查詢的工作

START classmetadata = node:classes(name = "MyClassMetadata") 
MATCH classmetadata<-[:INSTANCE_OF]-instance-[:RELATED_TO]->listype 
WHERE instance.name="MyInstance" and listype.name = "d" 
RETURN instance, listype 
ORDER BY instance.name ASC skip 0 limit 10 

,但如果我需要去尋找例如與名稱MYINSTANCE誰是RELATED_TO一個所有者與名稱d也關係到狀態與名X也關係到propertie與名Ÿ是有問題的查詢結果總是空的,有沒有什麼辦法來篩選大約兩個O 3或更多的nodes.properties(listype.name)如果他們是由相同類型的relatioship相關?

這樣的事情是不工作

START classmetadata = node:classes(name = "MyClassMetadata") 
MATCH classmetadata<-[:INSTANCE_OF]-instance-[:RELATED_TO]->listype 
WHERE instance.name = "MyInstance" AND listype.name = "x" 
AND listype.name = "y" AND listype.name="d" RETURN instance, listype 
ORDER BY instance.name ASC skip 0 limit 10 

回答

1

我爲每個關係添加了name屬性,以確保我在正確的節點中進行過濾。

START classmetadata = node:classes(name = "MyClassMetadata") 
MATCH classmetadata<-[:INSTANCE_OF]-instance-[r1:RELATED_TO]->listype1, 
instance-[r2:RELATED_TO]->listype2, 
instance-[r3:RELATED_TO]->listype3 

WHERE instance.name = "MyInstance" AND 
r1.name="state" AND listype1.name = "x" AND 
r2.name="property" AND listype2.name = "y" AND 
r3.name="owner" AND listype3.name="d" 
RETURN instance, listype 
ORDER BY instance.name ASC skip 0 limit 10 
0

所以你要找到所有listypes其中listtype的name屬性可以是d或x或y(在你的第一個代碼段)? 如果是這樣,那麼 START classmetadata = node:classes(name =「NodeType」) MATCH classmetadata < - [:INSTANCE_OF] -instance - [:RELATED_TO] - >列表類型 WHERE instance.state =「good」和(not (listype.name在[ 「d」, 「X」, 「Y」)) RETURN例如,listype ORDER BY instance.name ASC跳過0上限10

你上面的查詢也將工作...只是參考列表類型 - 不需要listtype1,listtype2等。 START classmetadata = node:classes(name =「NodeType」) MATCH classmetadata < - [:INSTANCE_OF] -instance - [:RELATED_TO] - >列表類型 WHERE實例。狀態=「好」和AND l istype.name! =〜「。Po。」 AND listype.name! =〜 「我。」 RETURN例如,listype ORDER BY instance.name ASC跳過0上限10

這就是你想要的?

相關問題