2012-07-05 41 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

这就是你想要的?

相关问题