如果我们有一个与其他节点相关的节点具有相同类型的关系
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))
要查找的实例节点,必须按索引中的节点类元数据查找其名称(这很容易)和实例名称(这很容易)以及 listtype .name = ..和 listype .name = ..和 listype .name = ..这就是问题所在:
如果我尝试仅查找名称 MyInstance 的实例谁是RELATED_TO 所有者且名称 d ,在这里我只查询一个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
但是,如果我需要查找姓名为主页的实例谁是RELATED_TO 所有者,名称 d 并且还与名称 x 的州相关,并且与 propertyie 相关,名称 y 有一个问题查询结果总是为空的,如果相同类型的关系相关,有没有办法同时过滤两个或三个以上的nodes.properties(listype.name)?
这样的事情不起作用
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
答案 0 :(得分: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
答案 1 :(得分:0)
所以你想找到listtype的name属性可以是d或x或y的所有列表类型(在你的第一个代码片段中)? 如果是的话,那么 START classmetadata = node:classes(name =“NodeType”) MATCH classmetadata&lt; - [:INSTANCE_OF] -instance - [:RELATED_TO] - &gt; listype WHERE instance.state =“good”和(not(listtype.name in [“d”,“x”,“y”])) RETURN实例,listype ORDER BY instance.name ASC跳过0限制10
您上面的查询也可以正常工作......只需统一引用listtype-不需要listtype1,listtype2等。 START classmetadata = node:classes(name =“NodeType”) MATCH classmetadata&lt; - [:INSTANCE_OF] -instance - [:RELATED_TO] - &gt; listype WHERE instance.state =“good”和AND listype.name! =〜“。 Po。” AND listype.name! =〜“。我。” RETURN实例,listype ORDER BY instance.name ASC跳过0限制10
这就是你要找的东西吗?