0

如果我们有一个节点通过相同类型的关系与其他节点相关联

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))

要查找的实例节点,必须通过索引中的节点类元数据通过其名称(这很容易)和实例名称(这也很容易)以及listype .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

但是如果我需要查找名称为MyInstance的实例,该实例是 RELATED_TO 名称为 d 的所有者,并且与名称x的状态相关,并且还与名称为y的属性相关,则查询结果始终为空,是如果它们通过相同类型的关系相关,有什么方法可以同时过滤大约两个或三个或更多节点。属性(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
4

2 回答 2

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
于 2012-07-07T04:00:48.333 回答
0

因此,您想查找 listtype 的 name 属性可以是 d 或 x 或 y 的所有列表类型(在您的第一个代码片段中)?如果是这样,那么 START classmetadata = node:classes(name = "NodeType ") MATCH classmetadata<-[:INSTANCE_OF]-instance-[:RELATED_TO]->listype WHERE instance.state="good" and (not(listype.name在 ["d","x","y"])) RETURN 实例,listype ORDER BY instance.name ASC 跳过 0 限制 10

您上面的查询也可以工作......只需统一引用 listtype - 不需要 listtype1、listtype2 等。 START classmetadata = node:classes(name = "NodeType ") MATCH classmetadata<-[:INSTANCE_OF]-instance-[:RELATED_TO ]->listype WHERE instance.state="good" 和 AND listype.name!=〜“。宝。 ”和listype.name!=~ " .me . " RETURN instance, listype ORDER BY instance.name ASC skip 0 limit 10

那是你要找的吗?

于 2012-07-05T03:15:02.400 回答